此题还有一种变种 即 两个线程分别控制灯光交替闪烁, 其中一个线程控制开灯,另外一个线程控制关灯。主要考察的是对多线程协同的理解。主要利用 wait和notify进行解题。
案例代码:
/**
* @date 2019/02/25
*/
public class ThreadTest {
public static volatile int i = 1;
public static void main(String[] args) throws InterruptedException {
final Object object = new Object();
Thread t1 = new Thread(()-> {
while(i<100) {
synchronized (object) {
if(i%2 == 0) {
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
;
} else {
System.out.println(i++);
}
}
}
});
Thread t2 = new Thread(()-> {
while(i<100) {
synchronized (object) {
if(i%2 == 1) {
object.notify();
} else {
System.out.println(i++);
}
}
}
});
t1.start();
t2.start();
while(true) {
Thread.sleep(1000);
}
}
}