notify方法何时执行?当前线程进入等待状态时notify方法才可以执行。
代码展示package ThreadTest;
import java.util.linkedList;
public class 生产者消费者 {
static int carNumber = 1;
public static void main(String[] args) {
Car4s car4s = new Car4s();
new Thread(new ProductTask(car4s),"汽车生产商1").start();
new Thread(new ConsumerTask(car4s),"汽车销售店1").start();
new Thread(new ProductTask(car4s),"汽车生产商2").start();
new Thread(new ProductTask(car4s),"汽车生产商3").start();
}
static class Car{ //汽车
int name;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
}
static class Car4s{ //4s店
linkedList CarList = new linkedList();
}
static class ProductTask implements Runnable{ //生产商
Car4s car4s;
public ProductTask(Car4s carList) {
this.car4s = carList;
}
@Override
public void run() {
while(true){
synchronized (car4s) {
if (car4s.CarList.size() < 4) {
Car car = new Car();
car.setName(carNumber);
car4s.CarList.push(car);
// System.out.println(car4s);
System.out.println(Thread.currentThread().getName()+"生产了汽车" + car.getName());
carNumber++;
car4s.notifyAll();
} else {
try {
car4s.wait(); //先进入等待状态才可以唤醒其他线程
} catch (InterruptedException e) {
System.out.println("睡眠失败");
}
}
}
}
}
}
static class ConsumerTask implements Runnable{ //消费者
Car4s car4s;
public ConsumerTask(Car4s carList) {
this.car4s = carList;
}
@Override
public void run() {
while(true){
synchronized (car4s) {
if (car4s.CarList.size() > 0) {
Car Buycar = (Car) car4s.CarList.poll();
// System.out.println(car4s);
System.out.println(Thread.currentThread().getName()+"出售了汽车" + Buycar.getName());
car4s.notifyAll();
} else {
try {
car4s.wait();
} catch (InterruptedException e) {
System.out.println("睡眠失败");
}
}
}
}
}
}
}



