java修饰符:Synchronize关键字

来源:互联网 发布:达芬奇密码 知乎 编辑:程序博客网 时间:2024/04/30 13:40
Synchronize 关键字 
  先提出问题,如果开启多线程同时操作同一实例变量,Thread-0线程从主内存中取出的值a 为1,然后a++;  Thread-1线程也从主内存中取出的值 a 进行a+=2操作;Thread-0存入2到主内存中,Thread-1也存入,这样就覆盖了Thread-0存入的值. 
  
   原因是在JAVA的内存模型中,是每一个进程都有一个主内存,每个线程都有自己的内存,线程从主内存取得数据,计算后再存回到主内存中. 

   解决这个问题就可以使用synchronize关键字. 
  使用synchronized修饰此方法后,把下面的这几个步骤当作一个原子操作:取数据,操作数据,存数据。原子操作是不能够被打断的,所以就保证了数据的一致性,这样在同一时间有线程再执行,虽然在效率上比较有影响,但是能够保证在同一时间只有一个线程能够访问到这一块内存单元。
0 0