|
|
1
7
在读写像bool或int这样的原始语句时,将它们声明为volatile就足够了。当一个线程读取时,另一个线程就完成了写入。变量永远不会处于无效状态。
|
|
2
2
几乎可以肯定的是,您需要在更高的级别上添加锁。只加
例如,考虑删除线程安全文档的内容。文档提供了两个相关的线程安全操作:删除两个索引之间的内容和一个长度操作。所以你得到长度,从零到长度删除,对吗?嗯,这是一个竞赛,因为文档在读取长度和删除内容之间可能会改变长度。在给定操作的情况下,无法使操作线程安全。(示例取自Swing文本。) |
|
|
3
0
如果使用Java 1.5 +,则应该使用 Condition 同步原语。 如果你遵循链接,它有一个关于如何使用它的很好的例子。 |
|
4
0
如果它是一个普通的布尔函数,那么它就不能保证工作,其中一个线程可能不会因为Java的内存模型而看到更新的布尔值。
请记住,如果读取此布尔值的线程依赖于布尔值的前一个值,则这些值都不会“起作用”——它可能会错过对该布尔值的更改,例如。 线程1:
线程2:
如果这是一个问题,并且您需要监视对布尔值的更改,请考虑使用wait()/notify()或 Condition |
|
|
5
-1
我建议将布尔值声明为volatile,并同步读写访问。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 2 年前 |
|
|
András Takács · Python多线程错误 2 年前 |