文档章节

java生产者与消费者和线程池

i
 interfaceList
发布于 2016/03/09 14:04
字数 889
阅读 45
收藏 0
Java线程生产者消费者模式与线程池


首先先简单地介绍一下生产者消费者模式:
例如学到的知识
Teacher(上课讲知识,造知识)=========(知识)>>Student(学生学习知识,用知识)
这就是简单的生产者消费者模式
下面来介绍一个示例来学习此概念
有一个类似Hibernate的SessionFactory工厂
MakeSessionFactory为造工厂,GetSessionFactory为使用工厂,则SessionFactory为中间类
现在实现初步的生产者消费者:version 1 code:
thread_1.SessionFactory
thread_1.GetSessionFactory
thread_1.SetSessionFactory
thread_1.SessionFactoryTest
有如下问题:
A:在每个线程中都创建了资源,每次的输出结果是null-0
已解决:在生产者消费者类中提供一个带SessionFactory的构造函数,每次传递的时候都能保持使用SessionFactory同一个对象
B:为了数据能够出现效果,加入了大条件循环,但是给出了不同的值:
同一个数据出现多次:因为cpu
配置文件名和工厂名不匹配:那是因为如果if语句刚执行好没结束就没else抢去了执行权,所以在输出时的信息不准确,例如:
in get... sessionFactory is[SessionFactory{factoryName='spring-log4j.appender.stdout.layout.ConversionPattern', configName='applicationContext.xml'}]==========
而且执行时顺序也发生了问题,如下
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097274]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097273]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097272]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097271]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097270]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097269]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097268]==========
10:15:01,828  INFO Spring4Hibernate5BaseUtils:182 - in make i = [-2146097267]==========
10:15:01,827  INFO Spring4Hibernate5BaseUtils:182 - in get... sessionFactory is[SessionFactory{factoryName='interface org.hibernate.SessionFactory', configName='hibernate.cfg.xml'}]==========
关于输出内容写到了日志,可以复制log4j.properties文件来实现,可以到日志中去查看可以发现有以上这种情况
C:现在来解决以上问题:解决方案是加锁,加锁需注意:
1.不同种类的线程都要加锁
2.不同种类的线程加的锁必须是同一把
如果不是同一把锁会发生空的情况,这也会作为一个例子
D:加好同一把锁后发现输出一大片不太好看,可以通过java等待唤醒机制来实现
Object类中提供了三个方法:
wait():等待
notify():唤醒单个线程
notifyAll():唤醒全部线程

这些方法定义在Object类中的原因是通过锁对象调用,而获取的锁可以是任意对象,所以这些方法必须定义在Object类中才能被任意类型的子类调用
finalVersion:把设置和获取的操作封装成了功能,并增加了同步,
设置只需要调用实体类方法即可


线程池:
好处:
线程池里的每一个线程结束后并不会死亡,而是回到线程池中成为空闲状态,等待下一个对象来调用
A:创建一个线程池对象,控制要创建几个线程对象。
public static ExecutorService newFixedThreadPool(int nThreads)
B:这种线程池的线程可以执行:
可以执行Runnable对象或者Callable对象代表的线程
做一个类实现Runnable接口。
C:调用如下方法即可
Future<?> submit(Runnable task)
<T> Future<T> submit(Callable<T> task)
D:我就要结束,可以吗?
可以。

Callable:带返回值的Runnable式接口,接下来做一个示例来描述我的Callable

© 著作权归作者所有

共有 人打赏支持
i
粉丝 0
博文 2
码字总数 1289
作品 0
闸北
程序员
私信 提问
ActiveMQ : Async error occurred: java.lang.OutO...

参考--http://activemq.apache.org/javalangoutofmemory.html 对于MQ的内容实用是可管理和可配置的。首先需要判断的是MQ的哪部分系统因内存不足而导致泄漏,是JVM,broker还是消费者、生产者...

hbdrawn
2011/06/28
0
0
聊聊并发(十)生产者消费者模式

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 在线程世界里,生产者就是生产数据的线程,消...

陶邦仁
2015/03/23
0
0
JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52714313 JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费...

Aduroidpc
2016/10/01
0
0
java基础thread——java5之后的多线程(浅尝辄止)

承上启下 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象L...

潇潇漓燃
06/03
0
0
Java中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。 1、什么是线程? 2、什么是线程安全和线程不安...

老道士
08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
14分钟前
0
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
7
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
4
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
5
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部