- 浏览: 734539 次
- 性别:
- 来自: 嘉兴
文章分类
- 全部博客 (386)
- Struts1.1 (2)
- Database (18)
- Core Java (15)
- Log4j (4)
- SSH (0)
- Dao (1)
- Architecture Design (1)
- References (2)
- Eclipse&MyEclipse (10)
- Hibernate (7)
- Spring (8)
- JavaMail (1)
- Data Structure And Algorithm (48)
- Struts 2 (2)
- SSI (1)
- SSL (2)
- JSTL (1)
- EJB3 (2)
- NET (2)
- XML (2)
- Components (2)
- Ant (3)
- Multi Thread (1)
- Performance Monitoring (1)
- Web Server (17)
- Oracle (1)
- jQuery (8)
- Regular Expression (1)
- Weblogic (1)
- Exception (1)
- Security (2)
- File Manipulation (1)
- JavaScript (12)
- JVM (2)
- HTML&DIV&CSS (4)
- Android (10)
- Beyond GFW (0)
- Business (0)
- SVN (6)
- 虚拟主机 (1)
- Virtual Host (3)
- My mentality (5)
- OS (15)
- ISPMP (3)
- Magento (5)
- Jsoup&HttpClient (7)
- LINUX (9)
- Database Design (0)
- Power Designer (1)
- TaobaoOpenPlatform (2)
- C/C++ (3)
- Maven (11)
- Quartz (1)
- Load Balance (1)
- Zabbix (4)
- Product&Business (1)
- Pay Interface (1)
- Tomcat (2)
- Redis (1)
- 集群 (1)
- Session (1)
- 共享Session (1)
- Jedis (1)
- jenkins (1)
- 持续集成 (1)
- Web前端 (1)
最新评论
-
aqq331325797:
特意注册账号上来说一句。牛逼!
swagger2.2.2 与 spring cloud feign冲突 -
KitGavinx:
跨顶级域名怎么保持sessionid一致?
Tomcat7集群共享Session 基于redis进行统一管理 -
jaychang:
dujianqiao 写道HI ,能否给一个完整的demo 啊 ...
淘宝订单同步方案 - 丢单终结者 -
GGGGeek:
找了一会儿,感觉mybatis应该没有这种操作,直到发现博主的 ...
mybatis collection list string -
dujianqiao:
HI ,能否给一个完整的demo 啊 ?
淘宝订单同步方案 - 丢单终结者
package org.jaychang.corejava.review;
import java.util.LinkedList;
import java.util.List;
/**
* @title <p>生产者与消费者</p>
* @author Jay Chang
* @date 2009/11/09
*/
class Stack {
private List<Object> list = new LinkedList<Object>();
/**
* 出栈
*
* @return
*/
public Object pop() {
return list.remove(list.size() - 1);
}
/**
* 将元素压入栈
*
* @param obj
*/
public void push(Object obj) {
list.add(list.size(), obj);
}
public int size() {
return list.size();
}
}
/**
*
* @author Jay Chang
*
*/
class Producer extends Thread {
private Stack stack;
public Stack getStack() {
return stack;
}
/**
*
* @param stack
*/
public void setStack(Stack stack) {
this.stack = stack;
}
/**
* 生产者生产商品,当商品栈满时,通知消费者消费商品
*/
public void produce() {
for (int i = 0; i < 100; i++) {
// 同步stack
synchronized (stack) {
System.out.println("producer get the lock");
//这里指定存放商品的商品栈的最大容量为10
while (stack.size() == 10) {
try {
//将生产者线程持有stack对象的锁释放,并将生产者线程放到stack对象的等待池中
stack.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 模拟生产者生产商品过程所需的时间
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String goods = "goods" + stack.size();
//将生产的商品放到存放商品的商品栈中
stack.push(goods);
System.out.println("producer product " + goods);
//唤醒在stack对象等待池中的等待的所有线程
stack.notifyAll();
}
}
}
public void run() {
produce();
}
}
class Consumer extends Thread {
private Stack stack;
public Stack getStack() {
return stack;
}
public void setStack(Stack stack) {
this.stack = stack;
}
/**
*
* 消费者消费商品,当商品栈中为空时通知生产者生产商品
*/
public void consume() {
for (int i = 0; i < 100; i++) {
synchronized (stack) {
System.out.println("consumer get the lock");
while (stack.size() == 0) {
try {
stack.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 模拟消费者消费商品,所需的时间
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Object obj = stack.pop();
System.out.println("cosumer consume " + obj);
}
}
}
public void run() {
consume();
}
}
public class Test{
public static void main(String[] args) {
Stack stack = new Stack();
Consumer consumer = new Consumer();
consumer.setStack(stack);
Producer producer1 = new Producer();
producer1.setStack(stack);
Producer producer2 = new Producer();
producer2.setStack(stack);
consumer.start();producer1.start();producer2.start();
}
}
评论
http://zhidao.baidu.com/question/224475092.html
发表评论
-
Java 8系列之重新认识HashMap
2017-03-31 18:42 472转自:http://tech.meituan.com/ja ... -
一张图读懂JAVA多线程
2015-11-30 09:05 7481、带着疑问看图 1)竞争对象的锁和竞争CPU资源以及竞争 ... -
java简单远程调用
2015-03-12 10:25 1071public interface HelloService ... -
不同类装载器生成的Class对象,所生成的实例相互转化报ClassCastException
2015-03-11 10:27 1048package com.jaychang.demo; ... -
Collections.EMPTY_LIST和Collections.emptyList()简单使用体会
2014-05-24 14:53 14761.背景在某些情况下,我们经常需要发挥一个空的集合对 ... -
Java字符串与字符集的基本概念
2014-04-22 14:00 607Java String是Java API中最常用的类,本文和 ... -
JAVA IO总结
2014-04-18 18:55 5511.java IO概念总结: 按照数:输入流和输出 ... -
解决PKIX:unable to find valid certification path to requested target 的问题
2014-04-07 16:53 2049这两天在twitter服务器上忽然遇到这样的异常: e: ... -
Java并发基础实践--死锁
2014-03-12 20:51 652本文是Java并发基础实践系列中的一篇,介绍了最简单的 ... -
Java中getResourceAsStream的用法
2013-09-20 09:35 855Java中getResourceAsStream的 ... -
java socket 多线程网络传输多个文件
2013-06-10 13:03 1184由于需要研究了下用 java socket 传输文件, ... -
JAVA抓取网页内容
2013-05-16 13:28 1401通过JAVA的API可以顺利的抓取网络上的大部分指定的网 ... -
JAVA 对CLASSPATH的详细介绍
2011-08-24 12:33 1192如何设置CLASSPATH,是初学者常提出的问题。网上有很多文 ... -
关于 Java 对象序列化您不知道的 5 件事
2010-05-12 17:41 978关于 Java 对象序列化您不知道的 5 件事 序列 ...
相关推荐
在本示例"bcb 多线程示例 MutilThread(生产者与消费者)"中,我们将探讨 Borland C++ Builder (bcb) 平台上的线程应用,特别是生产者-消费者问题的解决方案。 生产者-消费者问题是多线程编程中的一个经典案例,它...
线程池可以配合生产者消费者模式,例如通过提交任务到线程池来实现生产者,线程池中的工作线程充当消费者角色。 在使用生产者消费者模式时,需要注意以下几点: - **线程安全**:确保所有的操作都是线程安全的,...
在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...
在给定的压缩包文件"生产者与消费者代码"中,很可能包含了实现这一模型的示例代码。通过阅读和分析这些代码,你可以更好地理解如何在实际项目中应用生产者/消费者模型。例如,你可能会看到如何创建线程,如何初始化...
4. 通信与退出:生产者和消费者线程通过信号量进行通信,直到所有数据都被消费或者达到预设的退出条件。 通过这样的设计,我们可以保证生产者不会在缓冲区满时继续生产,消费者也不会在缓冲区空时尝试消费,从而...
这个压缩包中的"线程安全_生产者消费者"示例可能包含了使用以上概念和机制的Java代码,你可以通过学习和运行这个示例来深入理解这些并发编程的关键点。分析和理解这个代码,将有助于你在实际项目中有效地解决多线程...
生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存区域(通常是一个缓冲区),而消费者则从该缓冲区读取数据并进行处理。为了...
本实例将深入探讨"生产者消费者"模型,这是线程间通信的一个经典案例,用于展示如何高效地共享有限资源。 生产者消费者模式是一种设计模式,它基于操作系统中的队列数据结构。在该模型中,"生产者"线程负责生成数据...
"生产者消费者"问题是一个经典的多线程或进程同步问题,它用于演示和理解各种IPC机制。在这个场景中,生产者进程负责生成数据,而消费者进程则消费这些数据。下面我们将深入探讨Linux下的几种主要的IPC方法,以及...
在Java编程中,线程的生产者与消费者问题是多线程同步的一个典型应用场景。这个问题源自现实世界中的生产流水线,其中生产者负责制造产品,而消费者则负责消耗这些产品。在计算机系统中,生产者可以是生成数据的线程...
生产者消费者问题是多线程编程中的经典模型,用于展示如何高效地在多个线程之间共享资源。MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的C++库,用于构建Windows应用程序。在这个问题中,我们将...
"线程同步生产者消费者问题"是多线程编程中一个经典的示例,它涉及到资源的共享、线程间的协作以及等待条件的建立。以下是对这一问题的详细解析。 首先,我们需要了解"生产者消费者问题"的基本模型。在这个模型中,...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
下面是一个简单的多生产者-多消费者示例: ```java import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; class Producer implements Runnable { private final ...
生产者消费者模式是一种多线程或并发编程中的经典设计模式,它主要用于解决系统资源的高效利用和同步问题。在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等...
生产者与消费者问题是计算机科学领域中经典的同步问题之一,通常用于演示进程间通信和同步机制的概念。该问题涉及两个类型的进程:生产者和消费者。生产者负责生成数据并将其放入缓冲区中;而消费者则从缓冲区取出...
在C++中实现生产者-消费者问题,通常会用到线程同步机制,如互斥量(mutex)、条件变量(condition_variable)等。`p&c.cpp`文件可能就是这样一个实现示例,它通过控制并发访问来防止数据竞争和死锁。 1. **互斥量*...
生产者消费者模式是一种多线程同步的经典设计模式,它在多线程编程中扮演着重要的角色,用于协调生产数据和消费数据的两个并发过程。在本项目“Qt C++11 生产者消费者模式类”中,我们看到利用Qt框架和C++11的新特性...
在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...
总的来说,QWaitCondition是Qt5多线程编程中用于线程间通信和同步的强大工具,尤其在处理生产者-消费者问题时。通过熟练运用QWaitCondition,开发者可以构建出高效、稳定、响应迅速的应用程序。