【发布时间】:2014-07-06 04:38:17
【问题描述】:
我有一个由多个线程使用的对象,但从不同时使用(总是只有一个线程在其上执行一个方法)。它包含几个非最终字段。现在我想知道是否必须将所有字段标记为 volatile 以确保下一个线程(之前可能使用过该对象)将看到更改。如果没有 volatile,一个线程在什么时候从另一个线程获取更改?有保证吗?
如果我必须使用 volatile,Akka 是如何解决这个问题的?
在幕后,Akka 将在真实场景中运行一组演员 线程,通常许多参与者共享一个线程,然后 一个参与者的调用可能最终在不同的地方处理 线程。 Akka 确保此实现细节不会影响 处理actor状态的单线程。
【问题讨论】:
-
请澄清
I have an object which is used by multiple threads, but never concurrently. -
@SotiriosDelimanolis,现在清楚了吗?
-
@Joel 不太清楚。你的意思是:(a)多个线程读取并且只有一个线程写入? (b) 多线程读写,但没有竞态条件; (c) 只有一个特定线程读取或写入。我猜你的意思是“(b)”。
-
@necromancer, (d) 多线程读写,但始终保证只有一个线程可以访问对象。您可以将其与同步锁进行比较,但没有实际的锁。
-
你们如何确保保证?
标签: java multithreading akka volatile