- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个线程,每个线程都有自己的计数器:线程A有counterA,线程B有counterB。每个线程必须使用两个计数器:线程 A 必须使用 counterA 和 counterB,线程 B 也必须使用两者。我正在使用 AtomicInteger 并在两个线程之间共享计数器,我将它们作为参数传递给线程,并且每个线程将两个计数器存储在私有(private)字段中。
// ...
AtomicInteger counterA = new AtomicInteger(0);
AtomicInteger counterB = new AtomicInteger(0);
Thread tA = new Thread(new RunnableA(counterA, counterB));
Thread tB = new Thread(new RunnableB(counterA, counterB));
// ... in the constructor of RunnableA ...
RunnableA(AtomicInteger counterA, AtomicInteger counterB) {
this.counterA = counterA;
this.counterB = counterB;
}
//...
// The same for RunnableB
这是safe publishing吗?两个计数器的?安全发布是必要的,因为对对象的引用不够安全,无法在线程之间共享该对象。这种情况下如何实现安全发布?
提前致谢。
最佳答案
“安全发布”一词不适用于此。安全发布是指在构造函数中创建的状态的发布。在您的示例中,AtomicInteger
对象是在调用构造函数之前创建的。
如果使用其他类型,这可能安全也可能不安全,具体取决于 counterA
是否以及如何和counterB
变量已发布。但是,计数器实现为 AtomicInteger
对象,您无需担心发布。它们是原子/线程安全的,无论它们如何发布。唯一可能的问题可能是实例变量状态的发布。如果不观察类的其他同学,我们就无法判断这种情况是否会发生。例如:
final
或volatile
?run()
之后它们是否受到线程限制叫做? 请注意,可运行对象将在当前线程中实例化,而不是在 tA.start()
时创建的线程中实例化。和tB.start()
叫做。当start()
被调用时,当前线程的 start()
之间有一个 happens-before调用和新线程的 run()
称呼。这意味着可以保证将变量安全发布到子线程本身。所关心的只是将变量发布到其他线程。
关于java - 安全发布,论证传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527899/
这个问题已经有答案了: What is the purpose of the `self` parameter? Why is it needed? (26 个回答) 已关闭 9 年前。 我已经用 J
R 中 ~. 参数的含义是什么? 例如plot(~.,xyz..) 我已经看到这个论点在各种情况下多次使用,并且由于很难在谷歌上有意义地搜索符号,所以我几乎没有取得成功。 最佳答案 这是一个公式,采用
我是 Python 的新手。我不明白如何/为什么使用 self 参数: class Person: def __init__(self, name): self.name =
我是一名优秀的程序员,十分优秀!