C#线程学习笔记2

来源:互联网 发布:js tbody 动态添加行 编辑:程序博客网 时间:2024/06/12 05:42
1.当线程访问同一资源时,需要加锁。
C#中加锁的方法是用lock关键字来执行:lock(objectLocker){codeB}
对于(objectLocker)的要求,最好使用private static readonly 的内部变量。不能使用this,因为在一个线程中如果执行了有lock(this)的函数,就会锁定对象本身。如此该对象就不能背其他线程调用,如此当在其他线程中使用时就会出现问题。
private static readonly object o = new object();


2.lock参数只能是引用,如果是值类型,每次执行装箱时实际上是产生了一个新的对象导致lock失败。


3.多线程开发中极易产生间歇性和非重复性的bug,所以尽量不要使用多线程,如果使用要把多线程函数设计的尽量简单。


4.线程有一个IsAlive属性,在调用Start()之后直到线程结束之前一直为true。一个线程一旦结束便不能重新开始了。


5.Thread.Name作为线程的名字,线程的名字可以在被任何时间设置——但只能设置一次,重命名会引发异常


6.t.Join();函数会阻止调用线程,只到调用结束。即只有当t线程结束时,才会回到调用t的线程。


7.前台后台程序
线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活。默认创建的线程都是前台线程,如果想修改为后台线程,则
t.IsBackground = true;
理论上说,在主线程退出时,如果子线程是前台线,则程序会保持运行。所以主线程退出前要确保子线程已经执行完毕。


8.各线程抛出异常时,只能在当前线程中被捕获,而不能在主线程中捕获。

任何一个线程发生异常,整个程序都会被关闭。


学习原文:http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html


《完》

原创粉丝点击