/题目要求:
//有一个对象,对象中有一个status字段,字段类型是int,status的初始值为0。
//有两个线程,一个线程将这个对象的status字段更新为1,另一个线程将这个对象的status字段更新为2。
//要求这个对象的status字段的值被这两个线程交替更新,即121212,或者212121,均可。
//要求每个线程更新status字段10次,请考虑使用线程同步的方式来实现,避免死锁。
public class Test2 {
private static Object lock = new Object();
private static int status = 0;
static boolean flag = true;
public static void main(String[] args) {
Thread t1 = new Thread( () -> {
for (int i = 0; i < 10; i++) {
synchronized (lock) {
lock.notify();
flag = false;
if(!flag){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
status = 1;
System.out.println(String.format("loop:%d,status:%s", i, status));
}
}
});
Thread t2 = new Thread(() ->{
for (int i = 0; i < 11; i++) {
synchronized (lock) {
lock.notify();
flag = true;
if (flag) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
status = 2;
System.out.println(String.format("loop:%d,status:%s", i, status));
}
}
});
t2.start();
t1.start();
}
}