这是一个关于 Java 中常见并发问题的投票。一个例子可能是经典的死锁或竞争条件,或者可能是 Swing 中的 EDT 线程错误。我对广泛的可能问题感兴趣,也对最常见的问题感兴趣。因此,请为每条评论留下一个关于 Java 并发错误的具体答案,如果您遇到遇到的问题,请投票赞成。
我见过的最常见的并发问题是没有意识到一个线程写入的字段 不能保证 被另一个线程看到。一个常见的应用:
class MyThread extends Thread { private boolean stop = false; public void run() { while(!stop) { doSomeWork(); } } public void setStop() { this.stop = true; } }
只要停止不是 易失性 的或不 同步setStop的,就不能保证有效。这个错误尤其可怕,因为在 99.999% 中它在实践中并不重要,因为读者线程最终会看到变化 - 但我们不知道他多久看到它。run __
setStop
run