相关疑难解决方法(0)

793
推荐指数
17
解决办法
30万
查看次数

Java中volatile和synchronized之间的区别

我想知道在声明变量as volatile和始终访问synchronized(this)Java 中的块中的变量之间的区别?

根据这篇文章,http://www.javamex.com/tutorials/synchronization_volatile.shtml有很多要说的,但也有很多不同之处,但也有一些相似之处.

我对这条信息特别感兴趣:

...

  • 对volatile变量的访问永远不会阻塞:我们只进行简单的读或写操作,因此与synchronized块不同,我们永远不会持有任何锁;
  • 因为访问volatile变量永远不会持有锁,所以它不适合我们想要读取update-write作为原子操作的情况(除非我们准备"错过更新");

read-update-write是什么意思?写入也不是更新,还是仅仅意味着更新是依赖于读取的写入?

最重要的是,何时更适合声明变量volatile而不是通过synchronized块访问变量?使用volatile依赖于输入的变量是一个好主意吗?例如,有一个变量被称为render通过渲染循环读取并由按键事件设置?

java multithreading volatile synchronized java-me

222
推荐指数
4
解决办法
9万
查看次数

Java - 有没有理由检查单例是否为空两次?

我遇到了一些代码,开发人员不断检查单例是否为嵌套if的两次 - 如下面的代码中所示:

private static processManager singleton = null;
Run Code Online (Sandbox Code Playgroud)

...

public synchronized static processManager getInsatnce() throws Exception {

    if(singleton == null) {
      if(singleton == null){
             singleton = new processManager();
       }
     }
     return singleton
}
Run Code Online (Sandbox Code Playgroud)

我看不出这可能是什么原因,但代码中有很多实例,所以认为可能有原因?

java concurrency singleton multithreading

7
推荐指数
2
解决办法
1763
查看次数