package ThreadTest2;
//  线程通信的经典问题:生产者消费者//店员(资源)
class Clerk{private int productCount = 0 ;public synchronized void produceProduct() {if(productCount < 100 ) {++productCount;System.out.println(Thread.currentThread().getName()+":开始生产第"+  productCount + "个产品");notify();}else {try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public synchronized void comsumeProduct() {if(productCount > 0) {System.out.println(Thread.currentThread().getName() + ":开始消费第"+productCount + "个产品");productCount--;notify();}else {try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Producer extends Thread{private Clerk clerk;public Producer(Clerk clerk) {super();this.clerk = clerk;}public void run() {System.out.println(  Thread.currentThread().getName()+":开始生产产品");while(true) {try {this.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}clerk.produceProduct();}}}class Customer extends Thread{private Clerk clerk;public Customer(Clerk clerk) {super();this.clerk = clerk;}public void run() {System.out.println(Thread.currentThread().getName()+":开始消费产品");while(true) {try {this.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}clerk.comsumeProduct();}}}public class ProductTest {public static void main(String[] args) {Clerk clerk = new Clerk();Customer c1 = new Customer(clerk);c1.setName("消费者1");Producer p1 = new Producer(clerk);p1.setName("生产者1");p1.start();c1.start();}
}

线程通信的经典问题:生产者消费者问题相关推荐

  1. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  2. 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果

    一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...

  3. 线程的基本协作和生产者消费者

    协作基础(wait/notify) Java的根父类是Object,Java在Object类而非Thread类中,定义了一些线程协作的基本方法,使得每个对象都可以调用这些方法,这些方法有两类,一类是w ...

  4. java-线程安全问题,线程实现线程同步,线程状态,等待唤醒机制,生产者消费者模型

    目录标题 解决线程安全问题手段:线程同步 实现同步操作步骤 1.同步代码块 2.同步方法 静态同步方法 3.Lock接口的锁机制 线程状态 生产者消费者模型:等待唤醒 等待唤醒案例 线程安全问题是不能 ...

  5. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  6. 线程通信问题--生产者和消费者问题

    一.问题引入:首先实现一个线程通信的实例,使用两个线程交替打印输出100以内的数字. 代码实现如下: 1 package com.baozi.exer; 2 3 public class Commun ...

  7. [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...

    一.概念 多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者/消费者模式". Ø 什么是生产者? 生产者指的是负责生产数据的模 ...

  8. 采用信号量机制实现消费者与生产者的线程同步_Java线程通信

    线程通信是Java线程部分的重点,我们介绍一下常见的几种线程通信方式. 线程锁与同步 锁机制是线程通信的一种重要方式.当多个线程竞争某一个对象时,一旦某个线程获得对象就会立刻将其上锁,其他线程只能等待 ...

  9. java的知识点34——线程通信 || 生产者与消费者问题

    线程通信 应用场景:生产者和消费者问题 • 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 • 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待, ...

最新文章

  1. 层次聚类(cluster.AgglomerativeClustering)并通过TSNE进行可视化分析
  2. 【Python算法】哈希存储、哈希表、散列表原理
  3. 第二篇:数据可视化 - 基本API
  4. mysql5.7 json特性_mysql5.7新增加的JSON数据类型特征介绍
  5. pic单片机c语言程序设计实例精粹 pdf,PIC单片机C语言程序设计.pdf
  6. oracle怎么修改表字段长度,Oracle修改表结构字段名和字段长度
  7. 三菱工控板底层源码_三菱PLC实例代码开源PLC项目源代码参考程序百度云资源下载...
  8. 免费的HTTP代理IP服务器地址
  9. 移动硬盘数据莫名丢失,如何才能恢复
  10. 4天上线“战疫”小程序,腾讯敏捷在数字广东的落地实践
  11. 偏移出来的数据不准_cad偏移(cad偏移数据和输入的数据不准确)
  12. plop-template
  13. 【计算机科学】【2013.08】点云的表面重建
  14. C#数字金额转人民币大写金额的实现
  15. Android 自定义收音机刻度
  16. 调用smooth函数进行加噪数据的平滑处理
  17. 决策树中的CART树
  18. 电大2019计算机试题及答案实操题,2019电大计算机WORD统考题库及答案.doc
  19. 读书笔记(三)——11.26
  20. APP学习资料地址:

热门文章

  1. 前端学习(2014)vue之电商管理系统电商系统之监听on-remove事件
  2. 前端学习(94):css重置样式
  3. mybatis学习(17):列名与属性名不一致的情况(使用别名)
  4. 第一百五十三期: 云迁移可能失败的5种方式以及成功的5种方式
  5. 第十六期:AWS 瘫痪:DNS 被 DDoS 攻击了 15 个小时
  6. MATLAB K-means聚类代码讲解
  7. linux文件权限报错实例,自定义系统service SELinux权限报错
  8. 一日一学:返回排序好的列表的索引顺序
  9. angular2 路由ajax,如何通过Javascript函数在Angular 2中实现AJAX
  10. jquery template.js前端模板引擎