Synchronize 关键字
先提出问题,如果开启多线程同时操作同一实例变量,Thread-0线程从主内存中取出的值a 为 1,然后a++; Thread-1线程也从主内存中取出的值 a 进行 a+=2操作;Thread-0存入2到主内存中,Thread-1也存入,这样就覆盖了Thread-0存入的值.
原因是在JAVA 的内存模型中,是每一个进程都有一个主内存,每个线程都有自己的内存,线程从主内存取得数据,计算后再存回到主内存中.
解决这个问题就可以使用 synchronize关键字.
使用synchronized修饰此方法后,把下面的这几个步骤当作一个原子操作:取数据,操作数据,存数据。原子操作是不能够被打断的,所以就保证了数据的一致性,这样在同一时间有线程再执行,虽然在效率上比较有影响,但是能够保证在同一时间只有一个线程能够访问到这一块内存单元。
java修饰符:Synchronize关键字
最新推荐文章于 2024-07-13 19:55:31 发布