小编Kov*_*sky的帖子

Java:易失性隐含订单保证

我的问题是对此问题的扩展:易失性保证和无序执行

为了使它更具体,让我们假设我们有一个简单的类,它在初始化后可以处于两种状态:

class A {
    private /*volatile?*/ boolean state;
    private volatile boolean initialized = false;

    boolean getState(){
        if (!initialized){
            throw new IllegalStateException();
        }
        return state;
    }

    void setState(boolean newState){
        state = newState;
        initialized = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

初始化的字段被声明为volatile,因此它在"屏障"之前引入,确保无法进行重新排序.由于国家唯一字段写入之前 初始化字段写入和只读初始化场被读取,我可以去除挥发性从申报关键字状态,仍然不会看到一个陈旧的价值.问题是:

  1. 这个推理是否正确?
  2. 是否保证写入初始化字段不会被优化掉(因为它只是第一次改变)并且"屏障"不会丢失?
  3. 假设,CountDownLatch用作初始化器而不是标志,如下所示:

    class A {
        private /*volatile?*/ boolean state;
        private final CountDownLatch initialized = new CountDownLatch(1);
    
        boolean getState() throws InterruptedException …
    Run Code Online (Sandbox Code Playgroud)

java concurrency volatile java-memory-model

23
推荐指数
1
解决办法
983
查看次数

Vaadin UI在一段时间后分离

我正在使用Vaadin 7.1.2并严重依赖其推送通知支持.应用程序启动后,一切都运行良好,但是大约30-40分钟之后突然停止从服务器推送更新,而是登录com.vaadin.ui.UIDetachedException每个更新事件.重启很有帮助但很长时间.

所有配置参数都是默认值,除了我必须添加-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true命令选项以进行推送工作.

我部署到Tomcat 7.0.36,并且其配置中的所有内容都设置为默认值.

要更新UI,我只需致电

ui.access(new Runnable{...});
Run Code Online (Sandbox Code Playgroud)

在我传递给UI.init()方法中的每个组件的UI实例上.

我错过了什么吗?

java push vaadin

5
推荐指数
1
解决办法
2132
查看次数

标签 统计

java ×2

concurrency ×1

java-memory-model ×1

push ×1

vaadin ×1

volatile ×1