- 浏览: 102254 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (209)
- http://docs.jpush.io/server/java_sdk/ (1)
- SpingMVC ModelAndView (1)
- Model (1)
- Control以及参数传递 (1)
- https://www.alipay.com/ (1)
- 检查指定的字符串列表是否不为空。 (1)
- 转自http://my.oschina.net/rpgmakervx/blog/505434 (1)
- 压缩js (1)
- 含包含 字母数字校验 (1)
- 判断浏览器是ie (1)
- fixbox (0)
- 转自http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html (1)
- http://dl2.iteye.com/upload/attachment/0113/2406/afbd8d53-dcad-3afc-8d78-41c1591 (0)
- IDEA (0)
- maven搭建 (0)
- http://www.jeasyuicn.com/api/docTtml/index.htm (1)
- 给tomcat添加运行内存: (1)
- JPUSH推送 (1)
- requestScope (0)
- oracle中plsql安装client10连接数据库 (1)
- 不需要安装oracle11g (1)
- tuikuan (1)
- http://www.hjxmall.com/index.php (1)
- java (1)
- 参考 (1)
- xml签名验签模拟程序 (1)
- 技术网站收集分享 (1)
- Java NIO提供了与标准IO不同的IO工作方式 ------来源于 http://www.iteye.com/magazines/132-Java-NIO (1)
- oracle表查询语句优化 (0)
- oracle (5)
- a (1)
- TenpayHttpClient (2)
- mongodb (1)
- http://www.qcloud.com/product/cmongo.html?utm_source=pcsem1&utm_medium=bdgj46&utm_campaign=baidu (1)
- SpringMVC整合MongoDB开发 (0)
- SpringMVC整合MongoDB开发 https://www.mongodb.org (1)
- Java 语言中常见问题总结 (1)
- 数据库SQL优化大总结 (1)
- 拦截器与过滤器的区别 (1)
- Struts2中拦截器与过滤器的区别及执行顺序 (1)
- Spring声明式事务管理与配置 (0)
- oracle OPERTION (1)
- java 高并发多线程开发 (1)
- Collection 与 map 接口相关集合 (1)
- 多线程开发实践 (1)
- JVM调优总结 转自 http://www.importnew.com/18694.html (1)
- redis 五种数据类型的使用场景 转自于 http://blog.csdn.net/gaogaoshan/article/details/41039581 (1)
- HttpWatch http基础 来自于http://blog.csdn.net/gaogaoshan/article/details/21237555 (1)
- maven 远程仓库 http://blog.csdn.net/gaogaoshan/article/details/40266779 (1)
- 生成Webservice客户端的4中方法 http://blog.csdn.net/gaogaoshan/article/details/8980775 (1)
- http://fgh2011.iteye.com/blog/1564283 (1)
- sleep和wait有什么区别 http://xiaowei2002.iteye.com/blog/2174188 (1)
- JDK中常用包及其类 常见的几种RuntimeException (1)
- Java的运行原理 (1)
- mybatis缓存的使用及理解 http://my.oschina.net/dxqr/blog/123163 (1)
- 软件架构设计分析 (1)
- redis技术总结 (3)
- java面试总结知识点 (1)
- ZooKeeper技术 (1)
- Hadoop (1)
- sso单点登录 (1)
- SpringIOC (1)
- 书签ssssssssssssssssssssss (1)
- spring事务的隔离级别 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html (1)
- 秒杀系统架构分析与实战 http://www.importnew.com/18920.html (1)
- oracle 连接plsql配置 (1)
- maven工程集成springmvc http://blog.csdn.net/fox_lht/article/details/16952683 (1)
- java类序列化与反序列化版本唯一号serialVersionUID (1)
- spring注解用法总结 (1)
- eclipse导入maven项目找不到资源文件方法 (1)
- dubbo (0)
- socket 网络编程 服务器与客户端 编程 (1)
- Thread与Runnable实现线程利用线程插队实现求和操作 (1)
- 生产者与消费者模式 (1)
- JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML*** (1)
- xml 与JAVAbean转换 (1)
- MAP (2)
- decimalToString (1)
- 反编译插件 (0)
- 反编译插件 https://sourceforge.net/projects/jadclipse/?source=typ_redirect (1)
- AWX (1)
- 官网地址Dinp (1)
- public interface ExecutorService extends Executor (1)
- MAIN (1)
- 转自于 http://blog.csdn.net/lufeng20/article/details/24314381 (1)
- JaxbUtil (1)
- HttpXmlClient (0)
- Http post 请求 (1)
- URLDecoder (1)
- spdb (0)
- 订单号生成规则 (1)
- 距离0点毫秒数 (1)
- MyBatis存储过程调用java (1)
- Banks (1)
- 学习网址 (1)
- hots配置oracle数据库配置修改 (1)
- 支付宝文档 (1)
- Jadclipse (1)
- filter (0)
- Filter过滤器 (1)
- 工具类 fixbox (1)
- java quartz (0)
- java quartz 实现定时任务,每个礼拜一到礼拜五定时执行 (1)
- Thread (4)
- getResourceAsStream (1)
- BigData (1)
- 开源架构 (17)
- 架构 (0)
- 文件操作 (2)
- tools (20)
- 测试工具 (1)
- vm (1)
- mq (1)
- blog (1)
- 开源架构搭建技术 (6)
- JAVA细节技术点总结 (1)
- 优化技术 (1)
- LINUX命令使用 (1)
- spring (2)
- 大数据 (1)
- struts2 (1)
- python (1)
- pay (1)
- linux (1)
- 压力测试 (1)
- 代码检查插件 (1)
- 游戏端开发 (1)
- 微信开发相关 (1)
- 搜索引擎 (1)
- 网络技术 (1)
- 分布式部署 (1)
- 堆栈信息 (1)
最新评论
生产者生产一个产品,消费者消费一个,生产者要等消费者消费了才可以生产,消费者要等生产者生产了才有消费。
-----------------------
package com.tangkuo.thread.producer.cn;
public class Box {
private int value;//用于存放生产 的产品
//能否生产的标志,true( 可消费,不能生产),false (可生产,不能消费)
private boolean avaliable = false;
public synchronized void put(int value){//生产者
while(avaliable == true){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
avaliable = true;
notifyAll();//通知所有等待共享资源的线程
this.value = value;
}
public synchronized int get(){//消费者
while(avaliable == false){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
avaliable = false;
notifyAll();
return this.value;
}
}
-----------------------------------
package com.tangkuo.thread.producer.cn;
public class Producer extends Thread {
private Box box;
private String name;
public Producer(Box b, String n){
box = b;
name = n;
}
public void run(){
for(int i = 1; i < 6; i++){
box.put(i);
System.out.println("生产者"+ name + " 生产产品:"+i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
-----------------------------------------------------
package com.tangkuo.thread.producer.cn;
/**
* 消费者类
* @author Administrator
*
*/
public class Consumer extends Thread {
private Box box;
private String name;
public Consumer(Box b, String n){
box = b;
name = n;
}
public void run(){
for(int i = 1; i < 6; i++){
box.get();
System.out.println("消费者"+ name +"消费产品:"+ i);
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
-------------------------------------------
package com.tangkuo.thread.producer.cn;
public class ProducerConsumerTest {
public static void main(String[] args) {
Box box = new Box();
Producer p = new Producer(box, "001");
Consumer c = new Consumer(box, "002");
p.start();
c.start();
}
}
-------------------------------
-----------------------
package com.tangkuo.thread.producer.cn;
public class Box {
private int value;//用于存放生产 的产品
//能否生产的标志,true( 可消费,不能生产),false (可生产,不能消费)
private boolean avaliable = false;
public synchronized void put(int value){//生产者
while(avaliable == true){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
avaliable = true;
notifyAll();//通知所有等待共享资源的线程
this.value = value;
}
public synchronized int get(){//消费者
while(avaliable == false){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
avaliable = false;
notifyAll();
return this.value;
}
}
-----------------------------------
package com.tangkuo.thread.producer.cn;
public class Producer extends Thread {
private Box box;
private String name;
public Producer(Box b, String n){
box = b;
name = n;
}
public void run(){
for(int i = 1; i < 6; i++){
box.put(i);
System.out.println("生产者"+ name + " 生产产品:"+i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
-----------------------------------------------------
package com.tangkuo.thread.producer.cn;
/**
* 消费者类
* @author Administrator
*
*/
public class Consumer extends Thread {
private Box box;
private String name;
public Consumer(Box b, String n){
box = b;
name = n;
}
public void run(){
for(int i = 1; i < 6; i++){
box.get();
System.out.println("消费者"+ name +"消费产品:"+ i);
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
-------------------------------------------
package com.tangkuo.thread.producer.cn;
public class ProducerConsumerTest {
public static void main(String[] args) {
Box box = new Box();
Producer p = new Producer(box, "001");
Consumer c = new Consumer(box, "002");
p.start();
c.start();
}
}
-------------------------------
相关推荐
线程池可以配合生产者消费者模式,例如通过提交任务到线程池来实现生产者,线程池中的工作线程充当消费者角色。 在使用生产者消费者模式时,需要注意以下几点: - **线程安全**:确保所有的操作都是线程安全的,...
**生产者与消费者模式** 是一个经典的多线程问题,涉及到两个主要角色:生产者负责生成数据,而消费者则负责消耗这些数据。在共享资源的情况下,如何协调两者之间的操作,避免数据竞争和死锁,就成为了一个关键挑战...
在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...
在实际应用中,Java提供了更高级的并发工具类,如`BlockingQueue`,它已经内置了线程安全和阻塞操作,可以简化生产者与消费者模式的实现,提高代码的可读性和可维护性。例如,我们可以使用`ArrayBlockingQueue`作为...
生产者与消费者问题在计算机科学中是一个经典的多线程同步问题,主要涉及到进程间的通信和资源的共享。在Java中,我们通常通过`wait()`、`...理解并掌握生产者与消费者模式有助于编写高效、可靠的多线程应用程序。
生产者消费者模式的基本思想是将数据的生产与消费分离,生产者负责创建数据,而消费者负责处理这些数据。两者之间通过一个缓冲区进行交互,这个缓冲区作为共享资源,需要进行适当的同步控制,以避免生产者过快填满...
总之,生产者与消费者模式是理解和设计多线程程序的重要工具,它不仅在操作系统中有广泛应用,也是并发编程领域的一个基础课题。通过掌握这一模式,开发者能够更好地处理多线程环境下的数据共享和同步问题,提高软件...
在IT领域,尤其是在多线程编程中,"生产者与消费者"模式是一个经典的并发问题解决方案。这个模式描述了两个或多个线程之间...通过理解并熟练运用生产者与消费者模式,开发者可以更好地设计高效、可扩展的并发应用程序。
总之,生产者与消费者模式是多线程编程中的一个重要概念,它强调了如何在并发环境中高效且安全地共享资源。在DOS环境下实现这一模式需要克服一些额外的挑战,但通过巧妙地利用同步机制和通信手段,我们可以成功地...
## 生产者与消费者模式概述 生产者与消费者模式是一种经典的多线程编程模型,广泛应用于计算机科学领域,特别是在并发编程中。该模式通过将任务分为两部分:一部分负责生成数据(生产者),另一部分负责处理数据...
下面我们将分别探讨这三个类在生产者与消费者模式中的作用。 1. `Customer.java`(消费者): 消费者类通常包含一个方法来从共享资源(如队列)中取出并处理产品。在Java中,这可能涉及到使用`BlockingQueue`接口...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
- **结果验证**:通过观察运行结果,如缓冲区状态的变化、线程的执行顺序等,可以验证生产者与消费者模式是否正确实现,以及同步机制是否有效防止了数据竞争和死锁现象。 ### 结论 生产者与消费者模式不仅是一个...
总结一下,Java中的生产者与消费者模式是多线程编程中的重要设计模式,通过使用`BlockingQueue`等工具可以有效地实现生产者与消费者之间的同步和协作。这种模式广泛应用于各种并发场景,如任务调度、消息传递等。在...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
labview 基于事件的生产者消费者模式
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
【生产者/消费者模式】是一种常见的并发编程和系统设计模式,它主要解决的是在多线程环境下,如何协调生产者和消费者之间的数据处理问题。在软件开发中,生产者通常是生成数据的一方,而消费者则是处理这些数据的...