多线程编程时的注意事项
摘抄自:Practical Java
1、 实践34:将同步化(synchronized)降至最低
2、 实践46:对instance函数,synchronized锁定的是对象,不是函数,也不是代码
3、 实践47:对static函数,synchronized锁定的是这个class的Class对象
4、 实践48:用getter/setter替换public/protected的数据
5、 实践49:避免无谓的synchronized
6、 实践50:访问共享变量时,使用synchronized或者volatile
7、 实践51:在单一操作(single operation)中锁定所有用到的对象
8、 实践52:以固定而全局性的顺序取得多个lock以避免死锁
9、 实践53:优先使用notifyAll()。(而不是notify)
10、 实践54:针对wait()和notifyAll()使用spin lock
11、 实践55:使用wait()和notifyAll()。(而不是轮询循环polling loops)
12、 实践56:不要对locked object的引用重新赋值
13、 实践57:不要调用stop()或suspend()
14、 实践58:通过线程间的协作来优雅的终止线程
摘抄自:Effective Java
1、 第48条:对共享可变数据的同步访问
2、 第49条:避免过多的同步
3、 第50条:永远不要在循环的外面调用wait()
4、 第51条:不要依赖于线程调度器
5、 第52条:线程安全性的文档化
6、 第53条:避免使用线程组