Java并发(十三)多线程开发良好的实践

– 给线程起个有意义的名字,这样可以方便找 Bug。

– 缩小同步范围,例如 对于 synchronized,应该尽量使用同步块而不是同步方法。

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

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

– 使用本地变量和不可变类来保证线程安全。

– 使用线程池而不是直接创建 Thread 对象,这是因为创建线程代价很高,线程池可以有效地利用有限的线程来启动任务。

– 使用 BlockingQueue 实现生产者消费者问题。

 

参考资料

– BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007.
– 周志明. 深入理解 Java 虚拟机 [M]. 机械工业出版社, 2011.
– [Threads and Locks](https://docs.oracle.com/javase/specs/jvms/se6/html/Threads.doc.html)
– [线程通信](http://ifeve.com/thread-signaling/#missed_signal)
– [Java 线程面试题 Top 50](http://www.importnew.com/12773.html)
– [BlockingQueue](http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html)
– [thread state java](https://stackoverflow.com/questions/11265289/thread-state-java)
– [CSC 456 Spring 2012/ch7 MN](http://wiki.expertiza.ncsu.edu/index.php/CSC_456_Spring_2012/ch7_MN)
– [Java – Understanding Happens-before relationship](https://www.logicbig.com/tutorials/core-java-tutorial/java-multi-threading/happens-before.html)
– [6장 Thread Synchronization](https://www.slideshare.net/novathinker/6-thread-synchronization)
– [How is Java’s ThreadLocal implemented under the hood?](https://stackoverflow.com/questions/1202444/how-is-javas-threadlocal-implemented-under-the-hood/15653015)
– [Concurrent](https://sites.google.com/site/webdevelopart/21-compile/06-java/javase/concurrent?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1)
– [JAVA FORK JOIN EXAMPLE](http://www.javacreed.com/java-fork-join-example/ “Java Fork Join Example”)
– [聊聊并发(八)——Fork/Join 框架介绍](http://ifeve.com/talk-concurrency-forkjoin/)

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » Java并发(十三)多线程开发良好的实践

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多