Join
class MyApplication
{
public static void Main()
{
Thread t = new Thread(new ThreadStart(() =>
{
Console.WriteLine("aaaa");
}));
t.Start();
//t.Join();
Console.WriteLine("main");
}
}
只用t.Start(),t并不会立即开始
如下:
先出现“main“才出现的”aaaa“
加上t.Join(),线程会立即开始;
Join函数的作用是暂停其他线程,调用线程执行完毕后再执行其他线程。
就是将其他线程的ThreadState属性设置为WaitSleepJoin状态。
等价于对其他线程执行Sleep()函数。
可以在定义新线程时设置属性
Thread t = new Thread(new ThreadStart(() =>
{
Console.WriteLine("aaaa");
}))
{ Name = "thread", IsBackground = true };
Background属性:如果是true,在完成前会阻止程序退出。false则不会,不论是否执行完毕,只要不是后台的线程执行完了就直接退出了。
在属性中还可以设置优先级,即Priority:
在给高优先级是要小心,可能会降低其他线程的运行效率。
标记为ThreadStatic的字段不会在线程间共享。
[ThreadStatic]
public static int i;
ThreadLoacl< T >
在每个线程里都可以不一样,返回的是当前线程的信息。
Thread Pools
线程池,可以在任何时间创建,当线程完成时销毁。