![]() |
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,并同步读写访问。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |