随着职务转变,代码荒废很久了,很多时间都是在沟通需求,作为一名技术员,不写代码就感觉是在自废武功,慢慢颓废了很多,今天重新回顾了下JAVA线程知识,基础知识就不梳理了,网上也很多,主要关键几个状态位(新建、可运行、正在运行、阻塞等)和几个关键方法(sleep、yield、wait、notify、notifyAll等)搞清楚,基础应用知识应该了解的就差不多了,想深入了解的推荐看《JAVA并发编程实战》。废话不多说了,直接上例子,看了下网上的大致思路,结合实际应用时的场景,自己编写了一个例子,不到位的地方请大家及时指正,谢谢!

  例子:经典的生产者和消费者,多线程环境下协作生产和消费:多个生产者同时执行生产任务,多个消费者同时执行消费任务,当产品已满时,生产者们就等待,将锁交给消费者们,消费者开始消费,当没有产品可消费时,消费者等待,将锁交给生产者,生产者开始生产。定义总生产上限MAX_PRODUCE和每个生产者最大生产能力(上限)MAX_SIGNLE_PRODUCE以及每个消费者单次最大可消费数量MAX_SINGLE_CONSUME,特别说明下:如果单次生产后总生产量没有达到上限,这个时候生产者交出的锁可能被消费者获取到进行消费,也可能被生产者获取到继续生产,反观消费者也是同样的道理。因为在多线程环境下,所有生产线程之间、消费线程之间以及生产线程和消费线程之间会重叠进行(运行时间较短的情况下,可能观测到所有产品被某一个线程生产或者被某一个线程消费,将RUN运行结果保存到文件中,稍微运行时间久点,就能观察多个生产者同时并发生产产品或多个消费者并发消费产品的状况)。

运行结果:

java生产者消费者并发协作的更多相关文章

  1. 基于Java 生产者消费者模式(详细分析)

    Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...

  2. Java生产者消费者的三种实现

    Java生产者消费者是最基础的线程同步问题,java岗面试中还是很容易遇到的,之前没写过多线程的代码,面试中被问到很尬啊,面完回来恶补下.在网上查到大概有5种生产者消费者的写法,分别如下. 用sync ...

  3. Java多线程之并发协作生产者消费者设计模式

    两个线程一个生产者个一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性.常用的同步方法是采用标 ...

  4. java 生产者消费者问题 并发问题的解决

    引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...

  5. java 生产者消费者问题 并发问题的解决(转)

    引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...

  6. Java生产者消费者模型

    在Java中线程同步的经典案例,不同线程对同一个对象同时进行多线程操作,为了保持线程安全,数据结果要是我们期望的结果. 生产者-消费者模型可以很好的解释这个现象:对于公共数据data,初始值为0,多个 ...

  7. Java 生产者消费者模式详细分析

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. Java生产者消费者问题

    1. package interview.thread; import java.util.LinkedList; import java.util.Queue; import org.apache. ...

  9. Java生产者消费者模式

    为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能 ...

随机推荐

  1. Unity GUI 用C#和Javascript写法的区别

    以前都是用C#来写Unity的GUI.后来因为团队需要GUI必须用C#写. 其实一开始学Unity的GUI的时候我是想用C#来写,后来折腾了好久也没弄出来.反倒是这次不经意间就搞好了. C#和Java ...

  2. 在类库中使用log4net

    最近在做一个类库,用的C#写的,为了DEBUG方便需要日志输出,于是找了log4net这个工具进行日志输出; 因为调用这个类库的是C++,而且本人对C++不是很熟悉,于是无法在app.config或者 ...

  3. cf C. Prime Number

    http://codeforces.com/contest/359/problem/C 先求出分子的公因子,然后根据分子上会除以公因子会长生1,然后记录1的个数就可以. #include <cs ...

  4. hdu Fibonacci

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> u ...

  5. baike并行计算概念

    并行计算 概论 ▪ 高性能计算 ▪ 计算机集群 ▪ 分布式计算 ▪ 网格计算 ▪ 云端运算         方式 ▪ Bit-level parallelism ▪ Instruction level ...

  6. 基本SQL练习题--选课经典例题

    为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号.学员姓名.所属单位.学员年龄 C (C#,CN ) C#,CN 分别代表课程编号.课程名称 ...

  7. Hadoop 1、在虚拟机上进行 HDFS 安装

    一.准备条件 1.四台Linux虚拟机(1台NameNode节点,1台Secondary节点(Secondary和其中1台DataNode共用),外加2台DataNode) 2.下载Hadoop版本, ...

  8. poj 2184 Cow Exhibition(dp之01背包变形)

    Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - ...

  9. Android 应用间的集成

    第一次在手机上安装wsm tools时发现wsm只是个简单的集成框架,需要用其中的工具还需要单独安装,而安装一个工具以后发现图标没有显示,感觉很神奇,最近工作需要,也要做android应用间的集成,研 ...

  10. php_mysql、php_mysqli 与 pdo_mysql 的区别与选择

    php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案.   ...