首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能影响最低的挥发物替代品

性能影响最低的挥发物替代品
EN

Stack Overflow用户
提问于 2009-04-01 02:05:40
回答 5查看 557关注 0票数 2

我想实现用于取消线程的常用协作机制。然而,java内存模型只有在我处于JDK5之前的环境中时才在JDK5中修复。我理解,这意味着像SCIP中支持的那样做这样的事情是不正确的。

代码语言:javascript
复制
class Worker implements Runnable
{
    private volatile boolean _canceled;

    public void cancel() { _canceled = true; }

    public void run() {
        while( ! _canceled )
        {
            // do my Stuff
        }
    }
}

我正在考虑使用AtomicBoolean来封装_canceled变量。还有别的选择吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-01 02:08:00

JDK5中也添加了AtomicBoolean,因此除非您使用的是backport,否则此功能不可用。但是,是的,来自后端的原子类可能是最好的选择,因为您知道它是由精通JVM虚拟机规范的每个版本的工作原理的人编写的。

票数 3
EN

Stack Overflow用户

发布于 2009-04-01 04:18:52

如果我正确理解了FAQ,这在旧的内存模型中不是问题,旧的内存模型允许重新排序易失性字段。在他们的示例中,基于JVM,旧模型将允许"x“为0或42。经验法则是,重新排序应该始终是编译器/cpu的性能提升,但对程序员来说是不可见的。旧的模型打破了这条规则。

您的示例应该不会遇到这种可视性问题,并且可以正常工作

票数 3
EN

Stack Overflow用户

发布于 2009-04-01 02:25:58

util.concurrent package by Doug Lea ( java.util.concurrent的前身)可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/703794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档