- 浏览: 59446 次
- 性别:
- 来自: 西安
最新评论
-
greatwall3:
引用[i][i]第三方的神烦大叔地方地方[/i][/i]
mongodb之DBRef的java应用 -
yangfei3169725:
谢谢.....帮我忙了
做MongoDB并发测试,报出上述错误。究其原因,是数据库连接数太少
/**
*
* 生成者消费者问题
**/
public class ThreadDemo2{
public static void main(String args[])
{
BufferData bd = new BufferData();
Producer pro = new Producer(bd,"填装者1");
Producer pro2 = new Producer(bd,"填装者2");
Producer pro3 = new Producer(bd,"填装者3");
Consumer con = new Consumer(bd);
new Thread(pro).start();
new Thread(pro2).start();
new Thread(pro3).start();
new Thread(con).start();
}
}
//生产者
class Producer implements Runnable{
private BufferData bd;
private String name;
public Producer(BufferData bd,String name)
{
this.bd = bd;
this.name = name;
}
public void run()
{
int count = 10000;
while(count >0){
bd.setData(1, name);
count--;
}
}
}
//消费者
class Consumer implements Runnable
{
private BufferData bd;
public Consumer(BufferData bd){
this.bd = bd;
}
public void run()
{
int count = 10000;
while (count>0)
{
bd.getData(1, "");
//System.out.println(bd.toString());
count--;
//bd.notifyAll();
}
}
}
class BufferData{
private int id = 0;
private String name="";
private boolean isFull = false;
//填装子弹
public synchronized void setData(int n, String name)
{
try
{
if (isFull)
{
this.wait();
}
this.id += n;
this.name = name;
if(this.id == 10){ isFull = true; this.notifyAll();}
System.out.println(this.name+":"+"装子弹------------"+this.id+",isFull="+isFull);
Thread.sleep(500);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//打枪
public synchronized void getData(int n, String name)
{
try
{
if (!isFull)
{
//System.out.println("正在填装......");
this.wait();
}
}
catch (Exception e)
{
e.printStackTrace();
}
id = id-n;
if(id<=0)
{
this.isFull = false;
this.notifyAll();
}
System.out.println("剩余子弹------------"+id+",isFull="+isFull);
}
public String toString(){
return "id=" + id + " name=" + name;
}
}
发表评论
-
软件开发中的11个系统思维定律
2014-08-15 09:08 783英文原文:11 Laws of The ... -
单点登录cas jasig学习笔记
2014-05-08 16:25 915cas单点登录 1 什么是单点登录 ... -
ORA-00913: 值过多
2014-03-25 11:54 1379今天做项目 ... -
eclipse maven plugin 插件 安装 和 配置
2013-05-27 14:45 836环境准备: eclipse(He ... -
为经典版eclipse增加web and JavaEE插件
2013-05-07 08:26 824没怎么用eclipse所以对它不熟悉,近期在看pho ... -
提升Heritrix3.1.1的抓取效率
2013-05-02 16:47 1123Heritrix3.1.1是老外写的爬虫,可配置性非常 ... -
Linux软件安装方法小结(附:rpm详解)
2013-04-27 18:24 935在使用Linux系统的过程中,软件包的安装是避免不了的,在L ... -
eclipse安装 最新版 m2eclipse插件
2013-04-05 12:09 840近来,安装Maven,多数人提示在 http://m2ecl ... -
strust2demo
2013-02-20 14:56 8031)首先新建一个web工程:struts2demo 2)在 ... -
中英文字符截取问题
2013-02-05 16:18 793public static void main(Strin ... -
java 命令行引用jar包的方法
2013-02-02 09:31 1077关于这个问题,一直有些疑惑。今天在网上找了一下相关的资料。 ... -
java 常用小工具总结
2013-01-29 16:28 3187import java.io.BufferedReader; ... -
java生成xml全操作
2012-12-17 16:05 994import java.io.ByteArrayInpu ... -
删除指定目录下指定类型的文件操作
2012-12-14 14:31 974import java.io.File; publ ... -
List 不同于数组
2012-11-23 14:41 798Java 开发人员常常错误地认为 ArrayList 就是 J ... -
equals() 与 Comparable
2012-11-23 14:33 1668在浏览 Javadoc 时,Java 开发人员常常会遇到 So ... -
注意可变的 hashCode()
2012-11-23 14:29 928Map 是很好的集合,为我们带来了在其他语言(比如 Perl) ... -
Spring框架简介(转)
2012-11-06 17:13 8761、使用框架的意义与 ... -
java.lang.OutOfMemoryError: Java heap space
2012-11-03 13:46 808想一想,还是对于垃 ... -
mongodb之DBRef的java应用
2012-10-25 15:13 7420List<DBObject> listObj ...
相关推荐
记录型信号量通常用于解决生产者-消费者问题,因为它可以记录缓冲池中的空缓冲区和满缓冲区的数量,从而实现生产者和消费者的同步。 解决生产者-消费者问题的方法 为了解决生产者-消费者问题,我们可以使用记录型...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
在Java编程中,"生产者-消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的主要目标是通过分离生产数据和消费数据的过程,提高系统的效率和灵活性。在这个模式中,"生产者"负责生成数据...
2. **编写生产者线程**:创建一个名为 `Producer.java` 的类,实现生产者的逻辑。在这个类中,使用循环来模拟生产过程,并使用信号量确保只有在有空缓冲区的情况下才进行生产。 3. **编写消费者线程**:创建一个名为...
在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者模式。`BlockingQueue`接口是最常用的实现方式,它提供了线程安全的数据结构,可以用来作为生产者和消费者之间的缓冲区。例如,我们...
通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。
5. **死锁避免**: 在实现生产者-消费者问题时,必须注意死锁的可能。例如,如果生产者在放入元素前先等待消费者消费,而消费者在取出元素前又等待生产者生产,就可能出现死锁。合理设计同步机制和条件变量的使用可以...
"生产者-消费者"问题是一种经典的多线程同步问题,源于计算机科学中的操作系统领域,用于描述在并发环境中如何协调生产者和消费者之间的操作,确保数据的一致性和避免资源浪费。这个问题的基本设定是有一个共享缓冲...
【JAVA课程设计(生产者-消费者问题)】是学习多线程编程的一个经典案例,它主要探讨了如何在并发环境中有效地管理和协调生产者线程和消费者线程的交互。在这个设计中,生产者负责生成产品并放入共享资源区,而消费...
在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。它描述了两个不同的线程,生产者负责生成数据,而消费者则负责消耗这些数据。在这个Java实现中,我们将探讨如何使用Java的并发工具来解决这个...
根据提供的文件信息,我们可以深入探讨Java中的生产者-消费者模式,并通过具体的代码示例来解析这一模式的关键概念和技术实现。 ### Java生产者-消费者模式概述 生产者-消费者模式是多线程编程中的一种经典模式,...
总的来说,解决生产者-消费者问题需要深入理解线程同步原理,并结合具体的需求进行设计和实现。这个过程不仅锻炼了编程能力,也对并发编程的理解有着重要的实践意义。在实际项目中,这样的并发控制技术广泛应用在...
在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者的模型。其中,`BlockingQueue`接口是一个重要的组成部分,它提供了线程安全的队列操作,支持阻塞的插入(put)和删除(take)操作,...
生产者-消费者问题的基本场景是:有一个共享资源(如一个缓冲区),生产者线程负责往这个缓冲区填入数据,而消费者线程则负责从缓冲区取出数据。关键在于,当缓冲区满时,生产者需要等待,直到消费者取走一些数据;...
在Java中实现生产者-消费者问题不仅能够加深对Java多线程编程的理解,还能够锻炼出良好的并发编程思维,这对于未来在软件工程和系统开发等领域的工作至关重要。 总之,基于Java线程机制研究生产者-消费者问题,通过...
在Java中,可以使用`BlockingQueue`接口来实现生产者-消费者模式,它已经内置了线程安全的队列操作。生产者可以使用`offer()`方法添加元素,消费者则用`take()`方法取出元素,这两个方法会自动处理等待和唤醒操作。 ...
在 Java 中,我们可以使用多线程编程和同步机制来实现生产者-消费者模型。 生产者-消费者模型的定义 生产者-消费者模型是一种同步机制,用于解决多线程之间的数据共享和访问问题。生产者负责生产数据,并将其存储...
本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...