Skip to content

Commit c8ce91f

Browse files
authored
Merge pull request CyC2018#137 from crossoverJie/master
多线程开发良好的实践更新
2 parents f361091 + 0bee67d commit c8ce91f

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

notes/Java 并发.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,14 +771,19 @@ public static String concatString(String s1, String s2, String s3) {
771771

772772
# 九、多线程开发良好的实践
773773

774-
1. 给线程起个有意义的名字,这样可以方便找 Bug
774+
1. 给线程起个有意义的名字,这样可以方便找 Bug
775775

776-
2. 因为锁花费的代价很高,应该尽可能减小同步范围
776+
2. 因为锁花费的代价很高,应该尽可能减小同步范围
777777

778778
3. 多用同步类少用 wait 和 notify。首先,CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。
779779

780780
4. 多用并发集合少用同步集合。并发集合比同步集合的可扩展性更好,例如应该使用 ConcurrentHashMap 而不是 Hashttable。
781781

782+
5. 多采用无锁编程减少上下文切换,如将数据的 ID 按照 hash 算法取模分段,每个线程处理特定分段的数据。
783+
784+
6. 多利用 CAS 算法来并发更新数据。如 Java 中的 Atomic 包。
785+
786+
7. 优先考虑 volatile,而不是 synchronize。这样开销更小。
782787
# 参考资料
783788

784789
- BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007.

0 commit comments

Comments
 (0)