我还有一些关于同步和不稳定的东西.
我理解一个线程可以在本地安全地更改.从我到目前为止所读到的是synchronized> volatile.
假设我有一个不长或双的参数,所以基本上是一个标准的整数(没有原子).
我有一个同步方法,我用这个Integer做了很多工作.所有线程都会获得此Integer的更新版本吗?或者我是否必须宣布它是不稳定的?
public class stackoverflow { private int x = 0; public synchronized void rechnen(){ //dosomething } }
基本上在rechnen()完成后,我得到了10000个线程,所有都会获得x的更新版本,因为我的方法是同步的?或者我是否必须宣布它是不稳定的?
是的,他们将获得更新版本.synchronized
保证两件事:变化的可见性和原子性.volatile
只是保证变化的可见性.Java保证同步块内的代码不会被优化(通过混合synchronized
块内部和外部的命令),因此对于其中的变量的每次更改,在synchronized块结束后对所有线程都是可见的.