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("睡眠失败"); } } } } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)