Java并发编程:最佳实践与关键要点
1. 避免直接使用 wait
和 notify
在并发编程中,直接使用 wait
和 notify
就如同使用“并发汇编语言”进行编程,与 java.util.concurrent
提供的高级语言相比,它的使用难度较大。在新代码中,很少甚至不应该使用 wait
或 notify
。如果要维护使用了 wait
和 notify
的代码,必须确保始终使用常见的 while
循环调用。通常应使用 notifyAll
代替 notify
,如果使用 notify
,则必须格外小心以确保活性。
2. 记录线程安全性
2.1 线程安全性的重要性
类在其方法被并发使用时的行为是其与客户端契约的重要组成部分。如果不记录类的这方面行为,用户将不得不进行假设。如果这些假设错误,可能导致同步不足(如数据不一致)或过度同步(如性能下降),从而引发严重错误。
2.2 线程安全性的级别
线程安全性并非非黑即白,而是存在多个级别。以下是常见的线程安全级别:
| 线程安全级别 | 描述 | 示例 |
| — | — | — |
| 不可变(Immutable) | 类的实例类似于常量,无需外