多线程生产与消费
来源:互联网 发布:mac os 最新的版本号 编辑:程序博客网 时间:2024/05/01 04:03
import java.util.concurrent.locks.*; class Demo { private String name; private String sex; private boolean flag=false; Lock lock=new ReentrantLock(); Condition condition_in=lock.newCondition(); Condition condition_out=lock.newCondition(); public void setMas(String name,String sex) { lock.lock(); while(flag) { try { condition_in.await(); } catch (InterruptedException e) { e.getStackTrace(); } } this.name=name; this.sex=sex; flag=true; condition_out.signal(); lock.unlock(); } public void out() { lock.lock(); while(!flag) { try { condition_out.await(); } catch (InterruptedException e) { e.getStackTrace(); } } System.out.println(this.name+"===="+this.sex); flag=false; condition_in.signal(); lock.unlock(); } } class InputDemo implements Runnable { private Demo d; InputDemo(Demo d) { this.d=d; } public void run() { int num=0; while (true) { if (num==0) { d.setMas("MIKE","MAN"); } else { d.setMas("丽丽丽丽","女女女女女女"); } num=(num+1)%2; } } } class OutputDemo implements Runnable { private Demo d; OutputDemo(Demo d) { this.d=d; } public void run() { while (true) { d.out(); } } } class LockDemo { public static void main(String[] args) { Demo d=new Demo(); InputDemo id=new InputDemo(d); OutputDemo od=new OutputDemo(d); Thread t1=new Thread(id); Thread t2=new Thread(od); t1.start(); t2.start(); } }