将结果赋值 index
数据漏过
主要是由于线程1修改后index值已改变未输出前,cpu将权利交给线程2,线程2继续累加并输出
2.数据重复
主要是由于线程1执行到index +1但是还没赋值index...,cpu就将执行权交给线程2
3.超过最大值
当index=499 时线程1和线程2都看到满足条件,线程1将index增加到500后,线程2恢复执行变为501
synchronized
synchronized...实现同步
提供一种锁机制,确保共享变量互斥访问
synchronize 关键字包括 monitor enter 和 monitor exit 两个JVM,保证任何时候线程执行到monitor enter...成功之前都必须从主内存中获取数据,而不是缓存,在monitor exit 运行成功后,共享变量被更新的值必须刷入主内存中
synchronied 严格遵守 java happens-before 规则,...锁
死锁的原因
交叉锁导致死锁
A 持有 R1 等待 R2 , B 持有 R2 等待 R1
2.内存不足
共30M内存,A持有 10 ,B 持有 20 , 都在等待资源
3.一问一答数据交换
4.死循环造成的锁