C#线程(一)线程基础

一、创建线程


用 Thread t = new Thread(TestFun);创建子线程,并修改这个线程的名称
主线程同时执行TestFun函数,可以看到输出结果中,主线程和子线程的结果是穿插输出的,这就说明它们是同时执行了TestFun函数

二、暂停线程


用Thread.Sleep(1000);来暂停线程,这里我们让主线程暂停了一秒钟,你会看到主线程的输出结果比子线程晚了一秒

三、线程等待


用t.Join();让主线程等待子线程执行完毕才继续执行

四、终止线程

五、线程优先级


用Priority来设置线程优先级,这里我们创建了两个线程,第一个是最低优先级,第二个是最高优先级,可以看到,虽然我们先开始了t1线程,但却是t2先执行
优先级高的线程会被优先执行,且占用更多的CPU资源

六、向线程传递参数


第一个线程,是用线程的Start方法传递参数,线程调用的方法只能带有一个object类型的参数
第二个线程,是用lambda表达式调用函数

七、前台线程和后台线程


用IsBackground来设置此线程是否是后台线程,默认情况下,线程是前台线程
执行这段程序,你就会发现,线程2在未执行完的时候,程序便终止运行了
这便是前台线程和后台线程的区别:
程序会等待前台线程执行完毕结束工作,但是如果目前正在执行的只有后台线程,程序便不会等待,直接结束工作

八、Lock关键字




使用Lock关键字来使某些资源只能同时被一个线程使用
从执行结果可以看出,在线程1未执行完的时候,线程2调用了一次TestFun函数,但是由于Lock的原因,没有执行函数逻辑

注意:

Lock关键字在使用时可能会造成死锁


这段代码执行后你就会发现,一个打印信息都没有
这是因为,在主线程我们首先锁定了_lock2,而它继续执行,需要等待_lock1释放,而_lock1在子线程中被锁定着,它在等待lock2被释放,这样就形成了一个死循环的锁定,所以叫死锁

我会在我的公众号上推送新的博文,也可以帮大家解答问题
微信公众号 Andy and Unity 搜索名称或扫描二维码
在这里插入图片描述
希望我们能共同成长,共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值