消费者——生产者

资源共享:

//共享资源
public class Resource {
    public static int num = 0;
    public static final String LOCK = "lock";//共享的锁
}

消费者:

//消费者线程
public class ConsumerTask implements Runnable {

    //必须保证:消费者线程和生产者线程使用同一个对象锁
    @Override
    public void run() {
        while (true) {
            //同步代码块
            synchronized (Resource.LOCK) {
                if (Resource.num == 0) {
                    //没有:等待
                    try {
                        System.out.println(Thread.currentThread().getName() + "没有产品,等待中~~~");
                        Resource.LOCK.wait();//无限等待(会释放对象锁)
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    //有:消费
                    System.out.println(Thread.currentThread().getName() + " 有产品,开始消费"+Resource.num);
                    Resource.num--;
                    Resource.LOCK.notify();//唤醒:生产者
                }
            }
        }
    }
}

生产者:

public class ProducerTask implements Runnable {

    //必须保证:消费者线程和生产者线程使用同一个对象锁
    @Override
    public void run() {
        while(true) {
            synchronized (Resource.LOCK) {
                if (Resource.num == 0) {
                    //没有:生产
                    System.out.println(Thread.currentThread().getName() + " 没有产品,开始生产~~");
                    Resource.num = 1;
                    Resource.LOCK.notify(); //唤醒:消费者
                } else {
                    try {
                        //有:等待
                        System.out.println(Thread.currentThread().getName() + " 资源不足无法生成,等待中....");
                        Resource.LOCK.wait();//释放掉锁
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

测试:

public class Test1 {
    public static void main(String[] args) {

        new Thread(new ConsumerTask() ,"消费者").start();

        new Thread(new ProducerTask(),"生产者").start();
    }
}

相关推荐

  1. 消费者——生产者

    2024-05-04 16:10:03       16 阅读
  2. kafka生产者消费者

    2024-05-04 16:10:03       40 阅读
  3. Kafka建立生产者消费者

    2024-05-04 16:10:03       28 阅读
  4. Linux生产者消费者模型

    2024-05-04 16:10:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 16:10:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 16:10:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 16:10:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 16:10:03       20 阅读

热门阅读

  1. dart-sdk 安装以及vscode开发工具安装dart

    2024-05-04 16:10:03       12 阅读
  2. String str = new String(“Hello, World!“);

    2024-05-04 16:10:03       11 阅读
  3. 面试经典150题——判断子序列

    2024-05-04 16:10:03       8 阅读
  4. 基于micropython和esp32cam的图像颜色识别小作品

    2024-05-04 16:10:03       11 阅读
  5. 第IV章-Ⅰ Vue3组件与组件通信

    2024-05-04 16:10:03       12 阅读
  6. drop、delete与truncate的区别

    2024-05-04 16:10:03       11 阅读
  7. FPGA学习笔记(2)——Verilog语法及ModelSim使用

    2024-05-04 16:10:03       13 阅读
  8. 安卓抓包总结

    2024-05-04 16:10:03       11 阅读
  9. 深入探索CSS伪类:解锁样式与交互的无限可能

    2024-05-04 16:10:03       12 阅读