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();
    }

    }

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

  • 相关阅读:
    关于enum ,调用webservice,用户控件与主页面之间的交互,datsource属性,net面试题,反射类生成sql语句,URl重写一个小实例
    一个很简单的图片上传后立即显示在页面的控件(c#)
    委托之实现异步调用
    跟我学Linq
    w3c关于sql sever的基础操作
    join操作基础
    表操作基础
    javascript理论篇(详情见地址)
    android universal-image-loader的使用
    json相关类库,java对象与json相互转换
  • 原文地址:https://www.cnblogs.com/zx931880423/p/6869574.html
Copyright © 2011-2022 走看看