package test;
public class Test {
public static void main(String[] args) {
PublicResource res = new PublicResource();
new ProductThread("Thread-0",res).start();
new CustomerThread("Thread-1",res).start();
new ProductThread("Thread-2",res).start();
new CustomerThread("Thread-3",res).start();
}
}
class PublicResource {
private int number;
public synchronized void increase() {
while (number == 10) {
try {
System.out.println(Thread.currentThread().getName()+"等于10,等待");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number++;
System.out.println(Thread.currentThread().getName()+"加1,当前number="+number);
notify();
}
public synchronized void decrease() {
while (number == 0) {
try {
System.out.println(Thread.currentThread().getName()+"等于0,等待");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number--;
System.out.println(Thread.currentThread().getName()+"减1,当前number="+number);
notify();
}
}
class ProductThread extends Thread {
private PublicResource res;
public ProductThread(String name, PublicResource res) {
setName(name);
this.res = res;
}
public void run() {
for (int i=0;i<100;i++) {
try {
Thread.sleep((long) Math.random()*10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
res.increase();
}
}
}
class CustomerThread extends Thread {
private PublicResource res;
public CustomerThread(String name, PublicResource res) {
setName(name);
this.res = res;
}
public void run() {
for (int i=0;i<100;i++) {
try {
Thread.sleep((long) Math.random()*10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
res.decrease();
}
}
}
执行结果:
Thread-1等于0,等待
Thread-3等于0,等待
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-0加1,当前number=7
Thread-0加1,当前number=8
Thread-0加1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-1减1,当前number=7
Thread-1减1,当前number=6
Thread-2加1,当前number=7
Thread-3减1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-1减1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-1减1,当前number=2
Thread-1减1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-2加1,当前number=1
Thread-3减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-1减1,当前number=0
Thread-1等于0,等待
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-2加1,当前number=8
Thread-3减1,当前number=7
Thread-2加1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-2等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-2等于10,等待
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-1减1,当前number=8
Thread-1减1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-1减1,当前number=0
Thread-1等于0,等待
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-2加1,当前number=8
Thread-3减1,当前number=7
Thread-2加1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-2等于10,等待
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-3减1,当前number=8
Thread-3减1,当前number=7
Thread-3减1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-3减1,当前number=3
Thread-3减1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0