10 并发(78-84)

Wu Jun 2020-01-02 15:51:26
05 Java > 02 Effective Java

第 78 条:同步访问共享的可变数据

第 79 条:避免过度同步

第 80 条:executor 和 task 优先于线程

第 81 条:并发工具优先于 wait 和 notify

java.util.concurrent 中更高级的工具分三类:Executor Framework,并发集合(Concurrent Collection)以及同步器(Synchronizer)。

优先使用 ConcurrentHashMap,而不是 Collections.synchronizedMap 或者 Hashtable

最常用的同步器是 CountDownLatch 和 Semaphore,不常用的是 Barrier 和 Exchanger。

对于间歇式定时,应该始终使用 System.nanoTime 而不是 System.cucurrentTimeMills。

第 82 条:线程安全性的文档化

一个类为了可被多个线程安全使用,必须在文档中清楚地说明它所支持的线程安全性级别。

第 83 条:慎用延迟初始化

对于延迟初始化,最好建议“除非绝对必要,否则就不要那么做”。延迟化降低了初始化类或者创建实例的开销,却增加了访问被延迟初始化的域的开销。

如果域只是在类的实例部分被访问,并且初始化这个域的开销很高,可能就值得进行延迟初始化。

第 84 条:不要依赖于线程调度器

不要让应用程序的并发性依赖于线程调度器

不要依赖 Thread.yield 和线程优先级