您的位置:首页 > 其它

线程复习的笔记

2008-04-27 23:54 155 查看
一、让步
yield(): 给线程调度机制一个暗示:工作已经做得差不多了,可以让别的线程使用处理器了。(没有任何机制保证它将会被采纳。)

二、休眠
sleep(): 调用sleep()必须把它放到try块,因为有可能会被打断,比如interrupt()方法。类似还有wait(),join(),都会受到interrupt()方法的影响。

三、优先权
对于一个已经存在的线程,可以用getPriority()得到自己的优先权,也可以任何时候使用setPriority()修改自己的优先权。
JDK有10个级别的优先权,但它与多数的OS都不能很好的映射。比较好的策略是只使用MAX_PRIORITY,NORM_PRIORITY,和MIN_PRIORITY三种级别。

四、后台线程Daemo
提供一个通用服务的线程,这个线程不是程序中必须的部分。
必须在线程启动前调用setDaemo(),才能把它设置成后台线程。后台线程创建的子线程都是后台线程。
只要所有的非后台线程结束,程序就会结束。

五、加入到某个线程
某个线程调用t.join(),则这个线程会被挂起,直到目标线程t结束后,才会恢复(即t.isAlive()返回为假时)。
join()方法可以带超时参数(单位是毫秒或毫秒加纳秒),超时后总能返回。
join()方法可以被中断,做法是调用interrupt(),需要try-catch。

六、编码变体
当你的类已经继承了其他的类,可以使用“实现Runnable接口”的方法来实现线程(Java不支持多重继承)。实现Runnable接口,只需实现run()方法,Thread类也是实现自Runnable接口。

七、资源冲突
Java提供关键字synchronized,为防止资源冲突提供内置支持。当线程要执行被synchronized关键字守护的代码片段的时候,它将检查信号量的存在,然后获取信号量,执行代码,释放信号量。synchronized关键字内置于语言。

要控制对共享资源的访问,得先把共享资源包装进一个对象。然后把所有要访问这个资源的方法都标记为synchronized。 也就是说,一旦某个线程处于一个标于synchronized的方法中,那么在这个线程从该方法返回之前,其它要调用类中任何标记了synchronized的方法的线程都会被阻塞。

(continue...)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: