开启新线程需要传入参数:
它有四种重载,我们只需观察第二种
看看 ThreadStart是啥。
发现是一个无参无返回的委托。那么需要去创建一个无参无返回的函数放入到Thread中。
2、启动线程:
3、设置为后台线程
假如线程中函数为一个死循环函数。
执行
按照逻辑来讲,主线程执行创建一个新线程,新线程启动后主线程就结束了。进程本来也应该结束,但是因为新开线程是一个死循环,所有它会一直打印,导致进程结束不了。(创建的线程默认为前台线程)
设置成后台线程后 ,主线程结束了,后台线程也结束了,进程就结束了。
4、关闭释放一个线程
设置一个静态Bool变量。
新线程开启时:NewThreadLogic()也开始循环
当isRuning = false时,副线程停止。
5、线程休眠
一秒打印一次信息。
6、线程之间共享数据
在主线程中设置,0.0位置出有个⚪,颜色为红色。
在另开的副线程 10,5处设置正方形,颜色设置为黄色。
它们访问的都是同一片内存,但是代码的执行顺序会造成排列组合。因此打印了,0,0的黄色正方形。
在主线程中创建一个引用类型:
在主线程的while中加 lock(obj) { }
在副线程也加 lock(obj)
当执行主线程while时,副线程while也在执行。它们次吃都执行Console的同一片内存。但是加loca(obj),主线程while执行时,obj被锁住,副线程无法执行。等主线程执行完毕,副线程再去执行。