Java并发编程中应该注意的几点

常用的并发编程技巧:
(1)永远在synchronized的方法或对象里使用wait、notify和notifyAll,不然虚拟机会生成 IllegalMonitorStateException。

第一个问题比较容易发现,往往在单测就可以暴露出问题。

(2)始终使用while循环来调用wait方法(而非if),永远不要在循环外调用wait方法。这样做的原因是尽管并不满足被唤醒条件,但是由于其他线程调用notifyAll()方法会导致被阻塞线程意外唤醒,此时执行条件并不满足,他将破坏被锁保护的约定关系,导致约束失效,引起意想不到的结果。

第二个问题需要切记,这个问题往往会出现在刚接触并发编程的开发者身上。

标准的使用方式
synchronized(this){ while(condition){ this.wait(); } }
(3)唤醒线程,应该使用notify还是notifyAll?当你不知道究竟该调用哪个方法时,保守的做法是调用notifyAll唤醒所有等待的线程。从优化的角度看,如果处于等待的所有线程都在等待同一个条件,而每次只有一个线程可以从这个条件中被唤醒,那么就应该选择调用notify。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容