- 浏览: 364434 次
- 性别:
- 来自: Alien
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
本人采用java语言,用三种方式实现生产者——消费者的经典问题,至于生产者和消费的问题就不多说了,以下是第一种方式的具体代码:
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 消费者:生产者:生产者和消费者共用一个仓库
- */
- public class Consumer implements Runnable {
- private Storage storage;
- public Consumer(Storage storage) {
- this.storage = storage;
- }
- // 消费
- public void cunsume() {
- while (true) {
- storage.get();
- try {
- Thread.sleep(1500); // 每消费完一件产品,休息1.5秒
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- @Override
- public void run() {
- this.cunsume();
- }
- }
- </span>
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 生产者:生产者和消费者共用一个仓库
- */
- public class Producer implements Runnable {
- private Storage storage;
- public Producer(Storage storage){
- this.storage = storage;
- }
- @Override
- public void run(){
- this.produce();
- }
- // 生产
- public void produce(){
- while(true){
- storage.put();
- try {
- Thread.sleep(1000); // 每生产完一件产品,休息1秒
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
- </span>
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 仓库:
- * 先生产的先消费:使用队列的方式实现
- */
- public class Storage {
- public static final int MAX_SIZE = 100; // 仓库的最大货存
- // 容器,为了使用方便,没有面向接口编程,使用LinkedList作为实现类
- private LinkedList<Object> container = new LinkedList<Object>();
- // 从仓库中存放一个产品:
- public synchronized void put(){
- try {
- while (container.size() == MAX_SIZE) {
- try {
- this.wait();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- System.out.println("put()等待结束,仓库现有数量为"+ container.size() +", 开始生产");
- container.addLast(new Object());
- } finally {
- this.notifyAll(); // 通知其他线程
- }
- }
- // 从仓库中取出一个产品:
- public synchronized Object get(){
- try {
- while (container.size() == 0) {
- try {
- this.wait();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- System.out.println("get()等待结束,仓库现有数量为"+ container.size() +", 开始取出");
- return container.removeFirst();// 取出
- } finally {
- this.notifyAll(); // 通知其他线程
- }
- }
- }</span>
以下是测试代码:
[java] view plaincopy
- <span style="font-family:Arial;">
- public class Test {
- public static void main(String[] args) {
- Storage storage = new Storage();
- // 生产者和消费者两个线程类,用的必须是同一个仓库,即同一个仓库对象storage
- Consumer con = new Consumer(storage);
- Producer pro = new Producer(storage);
- new Thread(pro).start();
- new Thread(pro).start();
- new Thread(pro).start();
- new Thread(pro).start();
- // new Thread(con).start();
- // new Thread(con).start();
- // new Thread(con).start();
- // new Thread(con).start();
- new Thread(con).start();
- }
- }</span>
以下是测试代码结果:
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
发表评论
-
Spring 线程池使用2
2013-04-25 18:41 1107<!-- 配置异步线程执行器 --> < ... -
java synchronized与lock区别 转
2013-03-20 01:59 1011java synchronized与lock区别 ... -
java并发编程实践笔记(转)
2012-11-28 01:14 900一、 保证线程安全的 ... -
并发集合类ConcurrentSkipListSet
2012-11-24 03:26 5576ConcurrentSkipListSet Concu ... -
Amdahl 定律 (阿姆达尔定律)
2012-11-24 02:14 2026有些问题使用越多的资源就能越快地解决——越多的工人参 ... -
java线程内存模型,线程、工作内存、主内存
2012-11-24 02:08 18093java线程内存模型 线程、工作内存、主内存三者之间的 ... -
线程同步与异步
2012-11-22 23:53 2435Java中的线程同步与 ... -
Java 并发核心编程(转)
2012-11-06 10:16 977Java 并发核心编程(转) Java 并发核心编程 ... -
java线程:关于Callable和Future的简单使用:有返回值的线程
2012-11-06 09:19 1922分类: java_线程2012-07-03 19 ... -
java数据结构:ConcurrentSkipListSet<E>与CopyOnWriteArraySet<E>
2012-11-06 09:20 5795分类: java_数据结构 java_线程201 ... -
java线程:信号量
2012-11-06 09:20 839Java 信号量 Semaphore 介绍 Semaphore ... -
java线程:一个死锁的小程序
2012-11-06 09:20 2677死锁是这样一种 ... -
java线程:互斥锁与读写锁
2012-11-05 17:34 6996java线程:互斥锁与读写锁 分类: ja ... -
java线程:三种方式实现生产者消费者问题_3
2012-11-05 17:34 1275java线程:三种方式 ... -
java线程:几个实用的线程工具类
2012-11-05 15:15 8321java线程:几个实用的线程工具类 分类: ... -
java线程:三种方式实现生产者消费者问题_2
2012-11-05 14:26 1084java线程:三种方式实现生产者消费者问题_2 ... -
java ExecutorService 线程池Callable 和 Future接口
2012-08-29 21:10 1107javaEye转载(java多线程 Callable 的实现) ... -
线程并发
2012-03-31 15:41 10111:>内存模型 究竟什么是内存模型?内存模型描述了程序中 ... -
特殊的队列:BlockingQueue 使用(转)
2012-03-28 14:49 1023本例介绍一个特殊的队列:BlockingQueue,如果Blo ... -
Spring 线程池使用
2012-03-28 12:47 26040Spring 线程池使用 /** * */ 一个日志管理 ...
相关推荐
java多线程实现生产者和消费者
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
基本满足操作系统课上要求,java实现的生产者消费者模型。
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
java多线程实现生产者消费者关系,完成线程之间的同步。
用Java实现消费者与生产者两个线程进行调度
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
java线程实现的生产者和消费者的程序java线程实现的生产者和消费者的程序
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信