竞态、数据竞争
刚接触到这两个概念,有点迷糊,写了个例子,但总感觉不对劲,大佬们帮忙看看。
大白话:
竞态:访问的顺序性对运行结果有影响。
数据竞争:多个线程访问,但至少有一个线程在进行的是写操作。
public class Test01 {
private static volatile int num = 0;
private static volatile int a = 0;
private static void run(){
//竞态条件
if(num >= 10){
a = num/2;
}
}
public static void getA(){
run();
System.out.println("num:"+num + " a:" + a);
num ++;
}
}
public class Test02 {
public static void main(String[] args){
Lock lock = new ReentrantLock();
for (int i = 0;i<100;i++){
int finalI = i;
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.lock();
Test01.getA();
lock.unlock();
}
}).start();
}
}
}