相关疑难解决方法(0)

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中的易失性变量

所以我正在阅读这本名为Java Concurrency in Practice的书,我坚持这个解释,如果没有一个例子,我似乎无法理解.这是引用:

当线程A写入volatile变量并且随后线程B 读取同一个变量时,在读取volatile变量A之前,在写入volatile变量之前可见的所有变量的值都 变为可见B.

有人可以给我一个反例,说明为什么"在读取volatile变量之后A,写入volatile变量之前可见的所有变量的值变得可见B"?

我很困惑为什么B在读取volatile变量之前所有其他非易失性变量都不可见?

java concurrency multithreading volatile

20
推荐指数
3
解决办法
1万
查看次数

Java易失性和缓存一致性

如果在硬件级别实现高速缓存一致性,为什么我们需要volatile?任何核心/处理器都应该获得最新的价值?

或者它是完全处理不同的问题?

java volatile

17
推荐指数
1
解决办法
1647
查看次数

Java volatile是否读取刷新写入,并执行易失性写入更新读取

我理解read-acquire(在它之后没有重新排序后续的读/写操作)和write-release(不重新排序它之前的读/写操作).我的q是: -

  1. 在读取获取的情况下,它之前的写入是否被刷新?
  2. 在写入释放的情况下,先前的读取是否会更新?

读取和读取相同,与易失性读取相同,写入发布与Java中的易失性写入相同吗?

为什么这很重要的是,让我们来看看写释放的情况.

y = x; // a read.. let's say x is 1 at this point
System.out.println(y);// 1 printed
//or you can also consider System.out.println(x);
write_release_barrier();
//somewhere here, some thread sets x = 2
ready = true;// this is volatile
System.out.println(y);// or maybe, println(x).. what will be printed?
Run Code Online (Sandbox Code Playgroud)

此时,是x 2还是1?在这里,考虑准备挥发.据我所知,volatile之前的所有商店都将首先显示出来......然后只有volatile才能显示出来.谢谢.

参考: - http://preshing.com/20120913/acquire-and-release-semantics/

java multithreading

16
推荐指数
3
解决办法
1336
查看次数