代码:
// 资源类
class Resource {
private int j = 0;
// 加1操作
@SneakyThrows // 不用抛出异常
public synchronized void increase() {
// 判断
while (j == 1) {
this.wait();
}
// 干活
j++;
System.out.println(Thread.currentThread().getName() + ":" + j);
// 通知
this.notifyAll();
}
// 减1操作
@SneakyThrows
public synchronized void decrease() {
// 判断
while (j == 0) {
this.wait();
}
// 干活
j--;
System.out.println(Thread.currentThread().getName() + ":" + j);
// 通知
this.notifyAll();
}
}
public class Test {
public static void main(String[] args) {
// 创建资源类对象
Resource resource = new Resource();
// A线程和B线程加
new Thread(() -> resource.decrease(), "A").start();
new Thread(() -> resource.decrease(), "B").start();
// C线程和D线程减
new Thread(() -> resource.decrease(), "C").start();
new Thread(() -> resource.decrease(), "D").start();
}
}
结果:
A:1
C:0
B:1
D:0