一 前言
1.为什么网络编程要用到多线程?
在网络编程中经常会遇到网络阻塞或者网络等待等情况,处理这些情况就会等待很长时间,如可不加多线程处理就会出现执行时间过长,容易出现错误,反应迟钝等等状况,使用多线程后就会大大提高程序的健壮性和伸缩新性能。
2.进程和线程的区别
一个程序至少有一个进程,形象点说,你开QQ就是打开了一个进程,但是你还要同时和到几个人聊天,打开好几个聊天窗口,每个聊天窗口就是一个线程,(所以同一进程可以划分为若干个线程,每个线程都有自己的寄存器等等,但是代码区是共享的)
二 多线程基础
在学习多线程寄基础前,先给大家一个基础的宏观的概念,在这部分分为8个部分:
1.启动线程 2.终止线程 3.合并线程 4.线程休眠 5.线程优先级 6.同步 7.线程池应用
线程的应用用到了Thread类 他的主要方法有:
1.Abort 终止线程
2.Interrupt 中断线程
3.join 阻塞调用线程,直到某个线程终止时为止
4.Sleep 睡眠
先来上的简单的例子:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ConsoleApplication3{ class Program { static void Main(string[] args) { Thread thread = new Thread(new ThreadStart(() => { while (true) { Thread.Sleep(100); Console.WriteLine("111"); } })); thread.Start(); //启动线程 //thread.Interrupt(); //中断线程 会抛出异常 //thread.Abort(); //终止线程 Thread.Sleep(2000); //主线阻塞2s thread.Suspend(); //线程挂起 Thread thread2 = new Thread(new ThreadStart(() => { //thread.Start(); //这里有异常 [线程正在运行或被终止;它无法重新启动。] //为什么这里会报错呢? 如果想开始重新启动一个现有的进程 只能将之前的挂起 然后继续执行 //或者重新New一个thread对象 thread.Resume(); //唤醒挂起的线程 while (true) { Thread.Sleep(100); Console.WriteLine("222"); } })); thread2.Start(); //启动线程2 Console.ReadLine(); } }}