zoukankan      html  css  js  c++  java
  • 线程的生产者消费者问题

    package xiancheng;
    /**
    * wait() 等待 ,释放锁 sleep 不释放锁
    * @author User
    *
    */

    public class lianxi20 {
    //t 生产者生产 通知消费 f 消费者消费 通知生产
    private boolean flag=true;
    //模拟生产的物品
    private String picString;
    //生产
    public synchronized void play(String picString){
    //当flag为false状态,是生产者停止工作,进入等待状态
    if (!flag) {
    try {
    this.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    //模拟生产时间
    try {
    Thread.sleep(200);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //执行生产
    this.picString=picString;

    //通知消费
    this.notifyAll();
    //生产者停下
    this.flag=false;


    }
    //消费
    public synchronized void watch(){
    //当flag为true 消费者停止等待 进入等待状态
    if (flag) {
    try {
    this.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    //模拟消费过程
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //进行消费操作
    System.out.println(picString);
    //通知生产
    this.notify();
    //消费者停止
    this.flag=true;
    }

    }

    /**
    * 生产者
    * @author User
    *
    */
    public class lianxi21 implements Runnable{
    //定义资源
    private lianxi20 m;
    //定义含参构造器
    public lianxi21(lianxi20 m) {
    this.m = m;
    }
    //重写run方法 进行生产操作
    @Override
    public void run() {
    for(int i=0;i<20;i++){
    if (0==i%2) {
    m.play("傻光");
    }else {
    m.play("春光");
    }
    }
    }

    }

    /**
    * 消费者
    * @author User
    *
    */
    public class lianxi22 implements Runnable{
    //定义资源
    private lianxi20 m;
    //定义含参构造器
    public lianxi22(lianxi20 m) {
    this.m = m;
    }
    //重写run方法,线程执行是进行watch操作
    @Override
    public void run() {
    for(int i=0;i<20;i++){
    m.watch();
    }
    }

    }

    public class lianxi23 {
    public static void main(String[] args) {
    //共同的资源
    lianxi20 m=new lianxi20();
    //定义生产者
    lianxi21 p=new lianxi21(m);
    //定义生产者
    lianxi22 w=new lianxi22(m);
    //线程进行
    new Thread(p).start();
    new Thread(w).start();
    }

    }

    通过解决生产者消费者问题实现多线程的顺序执行问题..

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/zx931880423/p/6869574.html
Copyright © 2011-2022 走看看