public class ThreadTest { private Lock lock=new ReentrantLock(); Condition con=lock.newCondition(); Condition pro=lock.newCondition(); boolean flag=false; private String name; int count=1; public void set(String name) { lock.lock(); try { while(flag) { pro.await(); } this.name=name+"--"+count++; System.out.println(Thread.currentThread().getName()+"---生产者---"+this.name); flag=true; con.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void out(){ lock.lock(); try { while(!flag) { con.await(); } System.out.println(Thread.currentThread().getName()+"---消费者---"+this.name); flag=false; pro.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }}
public class Pro implements Runnable { private ThreadTest threadTest; public Pro(ThreadTest threadTest){ this.threadTest=threadTest; } @Override public void run() { while(true) { threadTest.set("商品"); } }public class Consume implements Runnable { private ThreadTest threadTest; public Consume(ThreadTest threadTest){ this.threadTest=threadTest; } @Override public void run() { while(true) { threadTest.out(); } } }public static void main(String[] args) {
ThreadTest threadTest=new ThreadTest(); Consume con=new Consume(threadTest); Pro pro=new Pro(threadTest); Thread t1=new Thread(con); Thread t2=new Thread(con); Thread t3=new Thread(pro); Thread t4=new Thread(pro); t1.start(); t2.start(); t3.start(); t4.start(); }
Java生产者消费者示例
最新推荐文章于 2022-04-15 19:27:29 发布