Run главноголетучего тест не соответствовал его случаться-перед функцией в JLS
public class ThreadTest {
volatile int p = 0, q = 0;
public void test() throws InterruptedException {
Thread writeThread = new Thread(){
public void run(){
while (!isInterrupted()) {
p++;
q++;
}
}
};
Thread readThread = new Thread(){
public void run(){
while (!isInterrupted()) {
//p should not be less than q
if(p<q){
System.out.println("happen before violation p = " + p + ";q = " + q);
}
}
}
};
writeThread.start();
readThread.start();
Thread.currentThread().sleep(2);
writeThread.interrupt();
readThread.interrupt();
}
public static void main(String[] args) throws InterruptedException {
new ThreadTest().test();
}
}
выход
произойдет до нарушения р = 736; д = 827
произойдет до нарушения р = 4635; д = 4657
произойдет до нарушения р = 6421; д = 6440
произойдет до нарушения р = 8719; д = 8803