可见性:
当多个线程操作一块内存时,一个线程将内存中的数据放入自己的缓存中进行修改,对于其他线程来说此修改是不可见的。
解决办法:在变量定义时添加volatile修饰;使用synchronized加锁。
原子性:
每个线程在运行时可能会被CPU中断。
解决办法:使用原子类,Atomicxxx,例:AtomicInteger x= new AtomicInteger(0);使用synchronized加锁。
有序性:
多个线程在运行时,代码的运行顺序可能会改变。
解决办法:在变量定义时添加volatile修饰;使用synchronized加锁。