我想实现取消线程的通常的协作机制。
但是,Java内存模型仅在JDK5之前的环境中才在JDK5中修复。
我了解,这意味着像SCIP所倡导的那样做是不正确的。
class Worker implements Runnable
{
private volatile boolean _canceled;
public void cancel() { _canceled = true; }
public void run() {
while( ! _canceled )
{
// do my Stuff
}
}
}
我正在考虑使用AtomicBoolean封装_canceled变量。
还有其他选择吗?
最佳答案
JDK5中还添加了AtomicBoolean
,因此除非您正在使用backport,否则此功能不可用。但是,是的,来自backport的原子类可能是最好的选择,正如您所知,它是由精通每种JVM虚拟机规范版本的人编写的。
关于java - 具有最便宜性能的 volatile 的替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/703794/