increase断点在number++,线程被唤醒之后会从这里执行;
decrease断点在number--,线程被唤醒之后会从这里执行;
package testSynchronized;
public class Demo4 {
private int number;
public synchronized void increase() {
while (0 != number) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 能执行到这里说明已经被唤醒
// 并且number为0
number++;
System.out.println(number);
// 通知A在等待的线程
notifyAll();
}
public synchronized void decrease() {
while (0 == number) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 能执行到这里说明已经被唤醒
// 并且number不为0
number--;
System.out.println(number);
notifyAll();
}
public static class IncreaseThread extends Thread {
private Demo4 Demo4;
public IncreaseThread(Demo4 Demo4) {
this.Demo4 = Demo4;
}
@Override
public void run() {
for (int i = 0; i < 20; ++i) {
// 进行一定的延时
try {
Thread.sleep((long) Math.random() * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 进行增加操作
Demo4.increase();
}
}
}
public static class DecreaseThread extends Thread {
private Demo4 Demo4;
public DecreaseThread(Demo4 Demo4) {
this.Demo4 = Demo4;
}
@Override
public void run() {
for (int i = 0; i < 20; ++i) {
// 进行一定的延时
try {
Thread.sleep((long) Math.random() * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 进行减少操作
Demo4.decrease();
}
}
}
public static void main(String[] args) {
Demo4 Demo4 = new Demo4();
Thread t1 = new IncreaseThread(Demo4);
Thread t2 = new DecreaseThread(Demo4);
Thread t3 = new IncreaseThread(Demo4);
Thread t4 = new DecreaseThread(Demo4);
t1.start();
t2.start();
t3.start();
t4.start();
}
}