最佳答案
我想知道在Java中声明变量为volatile
和总是在synchronized(this)
块中访问变量之间的区别?
根据这篇文章http://www.javamex.com/tutorials/synchronization_volatile.shtml有很多要说的,有许多不同之处,但也有一些相似之处。
我对这条信息特别感兴趣:
...
- 对volatile变量的访问永远不会阻塞:我们只是在做简单的读或写,所以不像同步块,我们永远不会持有任何锁;
- 因为访问volatile变量永远不会持有锁,所以它不适用于希望将read-update-write作为原子操作的情况(除非我们准备“错过更新”);
read-update-write是什么意思?写不也是一个更新吗?或者它们仅仅意味着更新是一个取决于读的写?
最重要的是,什么时候声明变量volatile
比通过synchronized
块访问变量更合适?对依赖于输入的变量使用volatile
是个好主意吗?例如,有一个名为render
的变量,它通过呈现循环读取并由按键事件设置。