concurrent programming in java design principles and patterns 学习记录。
Using Concurrency Constructs:
使用synchronized的一般规则:
- 更新对象自身的属性时,总是加锁。
- 访问可能被改变的对象属性时,总是加锁。
- 当调用其他对象的方法时,从不加锁。
使线程结束的方法有很多种:
- 最简单的方法时让run方法正常运行结束.
- 但是对于有无尽循环逻辑的线程来说,最好的选择是使用Thread.interreupt,这样线程即可从Object.wait(),Thread.join()和Thread.sleep()中退出,调用者可以捕获中断异常,进行合适的处理。
新开启的线程不持有开启者线程所持有的任何锁。
在自己的线程中不要让自己join,如此自己会等待自己执行完再继续执行,这样程序将无法退出。
默认每个线程的优先级与开启它的线程相同,主线程默认的优先级为5(优先级1-10).线程可以在自己的线程运行中设置自己的优先级。设置的优先级可以影响到本程序与其他程序在同一台计算机上的调度。
主线程被继承的优先级只能是5(主线程可以设置自己的优先级为其他值,但是主线程创建的其他线程默认继承的值是5,可以显示设置开启的线程的优先级,其他线程设置自己的优先级可以被其开启的线程继承)
Thread类还支持的控制方法有:suspend、resume、stop和destroy。suspend、resume和stop被弃用了,stop在发行版java中没被实现,可能永远也不会实现。suspend和resume的效果可以用waiting和notification来实现。
suspend、resume、stop与destroy已经全部弃用了,但是destroy也是实现了的。
Thread的yield方法建议先执行其他的线程,yield方法的作用取决于虚拟机的解释,因此yield的作用并不能获得保证。