auto commit
This commit is contained in:
parent
25288406ec
commit
4ff4aa96c4
|
@ -1621,13 +1621,19 @@ public static String concatString(String s1, String s2, String s3) {
|
|||
|
||||
# 十三、多线程开发良好的实践
|
||||
|
||||
1. 给线程起个有意义的名字,这样可以方便找 Bug;
|
||||
- 给线程起个有意义的名字,这样可以方便找 Bug。
|
||||
|
||||
2. 因为锁花费的代价很高,应该尽可能减小同步范围;
|
||||
- 缩小同步范围,例如 对于 synchronized,应该尽量使用同步块而不是同步方法。
|
||||
|
||||
3. 多用同步类少用 wait 和 notify。首先,CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。
|
||||
- 多用同步类少用 wait 和 notify。首先,CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。
|
||||
|
||||
4. 多用并发集合少用同步集合。并发集合比同步集合的可扩展性更好,例如应该使用 ConcurrentHashMap 而不是 Hashttable。
|
||||
- 多用并发集合少用同步集合。并发集合比同步集合的可扩展性更好,例如应该使用 ConcurrentHashMap 而不是 Hashttable。
|
||||
|
||||
- 使用本地变量和不可变类来保证线程安全。
|
||||
|
||||
- 使用线程池而不是直接创建 Thread 对象,这是因为创建线程代价很高,线程池可以有效地利用有限的线程来启动任务。
|
||||
|
||||
- 使用 BlockingQueue 实现生产者消费者问题。
|
||||
|
||||
# 参考资料
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user