有三个车库,模拟多个用户停车、离开的效果
package com.bonc; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class ThreadTest { class CarStore{ private BlockingQueue<Integer> bp; public CarStore(BlockingQueue bq){ this.bp=bq; } public synchronized void carIn(){ for (int i = 1; i <= 3; i++) { try { if (!bp.contains(i)){ notifyAll(); bp.put(i); Thread.currentThread().sleep(500); System.out.println(Thread.currentThread().getName()+"入库"+i); } }catch (Exception e){ e.printStackTrace(); } } } public synchronized void carOut(){ try { Thread.currentThread().sleep(100); if (!bp.isEmpty()){ System.out.println(Thread.currentThread().getName()+"出库"+bp.peek()); } notifyAll(); bp.take(); }catch (Exception e){ e.printStackTrace(); } } } class CarStoreIn extends Thread{ private CarStore cs; public CarStoreIn(CarStore cs){ this.cs=cs; } public void run() { for (int i = 0; i < 100000; i++) { cs.carIn(); } } } class CarStoreOut extends Thread{ private CarStore cs; public CarStoreOut(CarStore cs){ this.cs=cs; } public void run() { while (true){ cs.carOut(); } } } public static void main(String[] args) { ThreadTest threadTest = new ThreadTest(); BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(3); CarStore carStore = threadTest.new CarStore(queue); threadTest.new CarStoreIn(carStore).start(); threadTest.new CarStoreIn(carStore).start(); threadTest.new CarStoreIn(carStore).start(); threadTest.new CarStoreOut(carStore).start(); threadTest.new CarStoreOut(carStore).start(); } } 运行结果: