public class VolatileTest {
/*volatile*/ boolean flag = true;
public static void main(String[] args) {
new VolatileTest().test();
}
private void test() {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " start!");
while (flag) {
/*try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
}
System.out.println(Thread.currentThread().getName() + " stop!");
}
});
t1.setName("t1");
t1.start();
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " start!");
try {
Thread.sleep(1000);
flag = false;
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " stop!");
}
});
t2.setName("t2");
t2.start();
}
}
不加volatile的情况下,t1中如果加入sleep,则线程t1可停止。不加,则无法停止。sleep是让t1进入timewait的状态,为什么会出现这种情况。求大佬来解答