亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

生產者消費者

標簽:
Java

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Test {
public static void main(String[] args) {
Resource r = new Resource();
Input input = new Input(r);
Output output = new Output(r);
new Thread(input).start();
new Thread(input).start();
new Thread(output).start();
new Thread(output).start();
}
}
/**

  • 两个线程共同的资源

  • @author WangShuang

  • */
    class Resource{
    private String name;
    private String sex;
    private int count;
    private boolean flag;//添加一个标记用来表示Resource中的资源是否为空(Input以后代表存入不为空,Output以后代表取出为空)
    Lock lock = new ReentrantLock();
    Condition condition_input = lock.newCondition();
    Condition condition_output = lock.newCondition();
    public  String getOutput() {
    lock.lock();//上锁
    while(flag){//如果flag是真,代码资源库中的资源还没有被取走,此时该线程应该放弃cpu的执行权,并把另一个线程叫醒
    try {condition_input.await();} catch (InterruptedException e) {e.printStackTrace();}
    }
    System.out.println(Thread.currentThread().getName()+"消费了一个"+sex+"---------------"+name);
    flag=true;
    condition_output.signal();
    lock.unlock();//开锁
    return name+"---"+sex;

    }
    public  void setInput(String name,String sex) {
    lock.lock();//上锁
    while(!flag){//如果flag是假,代码资源库中的资源已经被取走,此时该线程应该放弃cpu的执行权,并把另一个线程叫醒
    try {condition_output.await();} catch (InterruptedException e) {e.printStackTrace();}
    }
    this.name = name+count++;
    this.sex = sex;
    System.out.println(Thread.currentThread().getName()+"生产了一个"+this.sex+"---"+this.name);
    flag=false;
    condition_input.signal();
    lock.unlock();//开锁
    }

}
/**

  • 存资源的线程

  • @author WangShuang

  • */
    class Input implements Runnable {
    private Resource resource;
    public Input(Resource resource) {this.resource=resource;
    }
    @Override

  • this.resource=resource;


  • }


  • @Override


this.resource=resource;
}
@Override
br/>this.resource=resource;
}
@Override<br <="" a="">public void run() {
while(true){
resource.getOutput();
}
}
}

this.resource=resource;


}


@Override


this.resource=resource;
}
@Override

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
27
獲贊與收藏
114

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消