/*资源类*/
public class ShareValue {private int total;public ShareValue(int total){this.total=total;}//生产void putValue(int value){total+=value;}//消费资源int getValue(int value){if(total-value>=0){total-=value;}else{value=total;total=0;System.out.println("Empty!");}return value;}//得到当前的资源值int getNowTotal(){return total;}}/*  生产者类 */
class Producer extends Thread {// 共享的ShareValue对象ShareValue share;// 要增加的值int value;public Producer(String name, ShareValue share, int value) {super(name);this.share = share;this.value = value;}public void run() {//同步share对象 ,直到当前代码块运行完毕后,share的对象锁才会释放synchronized (share) {// 在增加之前获取share的total值int n = share.getNowTotal();try {sleep(100);} catch (InterruptedException e) {System.out.println(e);}share.putValue(value);// 打印增加之前的total的值n,增加的值value和增加之后total的值System.out.println(getName() + ",Value:" + n + " Put value:"+ value + " Total value:" + share.getNowTotal());}}
}/*消费者类*/
class Consumer extends Thread{//共享的ShareValue对象ShareValue share;//要减少的值int value;public Consumer(String name,ShareValue share, int value) {super(name);this.share = share;this.value = value;}public void run(){  //同步share对象,直到当前代码运行完毕后,share的对象锁才会释放synchronized (share) {//在减少之前,获取share对象的total值int n=share.getNowTotal();try {sleep(100);} catch (InterruptedException e) {System.out.println(e);}share.getValue(value);//打印减少之前的total的值n,减去的值value和减少之后total的值System.out.println(getName()+",Value:"+n+" Get value:"+value+" Total value:"+share.getNowTotal());}}
}/*  测试主类 */
public class TestDemo {public static void main(String[] args) {ShareValue share=new ShareValue(0);Producer producer1=new Producer("producer1", share, 100);Producer producer2=new Producer("producer2",share,200);Consumer consumer=new Consumer("consumer", share, 50);producer1.start();producer2.start();consumer.start();}}
/* 通过对share对象的锁定来达到同步的目的  */

java 线程“生产/消费”模型1相关推荐

  1. java线程“生产/消费”模型2

    /* 资源类 */ class ShareValue {private int total;//判断对象是否为空private boolean isEmpty=true;//判断对象是否已满priva ...

  2. Java实现生产消费模型的5种方式

    ** 前言 ** 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储 ...

  3. 生产-消费模型之阻塞队列的源码分析

    文章目录 前言 阻塞队列API 存放元素 boolean add(E e) boolean offer(E e) boolean offer(E e, long timeout, TimeUnit u ...

  4. java生产消费模型代码实现_生产者-消费者模型的Java实现

    本文转自:http://tanlan.iteye.com/blog/1158154 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个 ...

  5. java 运动的大球吃小球_JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型...

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 [email protected]*/ 前几天用多线程实现了创建小球并移动,想到大鱼吃小鱼,便突发奇想要写一个大球吃小球.首先第一步自然是先 ...

  6. java线程的内存模型_java多线程内存模型

    java多线程内存模型: 可见性 要实现共享变量的可见性,必须保证两点: 1.线程修改后的共享变量能够及时从工作内存刷新到主内存中: 2.其他线程能够及时把共享变量的最新值从主内存更新到自己的工作内存 ...

  7. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  8. 23.生产与消费模型

    实际生活中,需要操作共享的某个资源(水池),但是对这个共享资源的操作方式不同(部分是注水[生产].部分是抽水[消费]).把这种现象我们可以称为生产和消费模型. 生产:它可以采用部分线程进行模拟.多个线 ...

  9. Java线程安全队列Queue实现原理

    原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...

最新文章

  1. MATLAB 半球面
  2. 在ubuntu16.04中一键创建LAMP环境
  3. 计算机常考应用分析题,计算机常见故障及排除
  4. 值得关注的医疗 AI 公司(待续)
  5. antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...
  6. http响应头中X-Frame-Options的作用及危害
  7. 含HTML标记的内容分页 (C#)
  8. ubuntu java环境变量_hadoop:伪分布模式环境变量的配置
  9. pandas操作手册
  10. json 格式化工具/网站
  11. 电脑计算机硬盘内存满了怎么清理,电脑磁盘空间怎么清理 电脑磁盘空间清理方法【详解】...
  12. 关于经管类实证论文的结构及写作
  13. [STL]priority_queue多种方式自定义排序
  14. html5版堆糖,堆糖(Duitang)
  15. 面向削峰填谷的电动汽车多目标优化调度策略
  16. leetcode 每日一题—274.H指数
  17. 阿里云安全组设定(虚拟机端口打开)
  18. TDM阅读笔记,在推荐系统的应用
  19. 塑料按照分子结构分类
  20. 0906期特别策划——“架构师大阅兵”

热门文章

  1. diskgenius 接触“只读“失败_相亲总是失败,这三个步骤你都做了吗?
  2. linux单网卡多拨Adsl,ROS单线多拨pppoe
  3. 2021Golang技术基础知识及学习路线图
  4. graph面板x轴模式包括哪些_发那科数控车床面板讲解
  5. mysql自增长主键_MySQL数据库8(九)列属性之主键、自增长
  6. A customized combobox with JQuery
  7. (1-1)line-height的定义和行内框盒子模型
  8. CSS基本知识(慕课网)
  9. http强缓存在firefox和chrome之间的差异
  10. 转-测试用例-常用控件