天天看点

C#学习之路-线程(二)

将之前的第一部分没写到的补充一下,具体例子以后会写。

Thread类,该类允许创建前台线程,以及设置线程的优先级。使用Thread类可以创建和控制多线程。

lamdba表达式还可以与Thread类一起使用,将线程的实现代码传送给Thread构造参数。

如果多个前台线程在运行,而Main()方法结束了,应用程序的进程就仍然是激活的,直到所有前台线程完成任务为止。

在默认情况下,用Thread类创建的线程是前台的,而程序池中的线程是后台的。

再用Thread类创建线程时,可以设置IsBackground属性,来确定该线程是前台的还是后台的线程。

线程由操作系统调度,给线程指定优先级,就可以影响调度顺序。

在调用Start()方法后,新线程仍不失处于running状态,而是出于UnStarted状态,只有操作系统调用线程以后,才会是Running状态,读取Thread.TreadState属性,就可以获得当前线程的运行状态。

Lock语句是设置锁定和解除锁定的一种简单方式,在添加lock语句之前,先进入一个争用条件。

Interlocked类用于使变量的简单语句原子化。提供了以线程安全的方式递增、递减、交换和读取值。

lock(this){return state++} ==return Interlocked.Increment(ref state);

对于同步,Barrier类非常适用于其中工作有多个任务分支并且以后有需要合并的工作。它用于需要同步的参与者。激活一个任务时就动态的添加了其他参与者。

Monitor类的主要优点是:可以添加一个等待被锁定的超时值。这样就不会无限期的等待被锁定。

如果有大量的锁定,且锁定的时间总是非常短,可以使用SpinLock。

WaitHandle是一个抽象的基类,用于等待一个信号的设置。可以等待不同的信号。

Timer类用于在某个时间间隔后调用某个方法。

 public static void Thread()

        {

            var t = new Thread(first);

            t.Start();

        }

        public static  void first()

        {

            Console.WriteLine("第一个");

        }