多个线程同时访问一个资源并进行读写操作时,资源改变在多个线程中同时操作,会造成冲突
public class Test implements Runnable{
private static int count=10;
public /*synchronized*/ void run(){
count--;
System.out.println(Thread.currentThread().getName()+" count="+count);
}
//下面new出来的5个线程,拿到的都是t这一个对象,只有一个count
//当程序启动后后,可能出现线程插入,第一个线程执行到count--时,第二个线程启动,count--,然后就会出现7,7,6,5,4这样子的情况
public static void main(String args[]){
Test t=new Test();
for(int i=0;i<5;i++){
new Thread(t,"THREAD"+i).start();
}
}
}
在不加sychornized关键字时,程序多运行几次就会出现上面的情况。
THREAD0 在执行完count–还未执行打印时,THREAD1 也进行了count–操作。就造成了THRAD0 拿到的count是10,执行一次自减操作后变成8,这种冲突的情况