package com.sohu.babyduncan;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* @author: guohaozhao
* @since: 13-7-10 21:41
*/
public class ThreadTest {
private static final byte[] lock = new byte[0];
static volatile boolean startProduce = true;
static volatile boolean startConsume = true;
private static final List<String> list = new ArrayList<String>();
private static class Producer implements Runnable {
@Override
public void run() {
while (true) {
if (!startProduce) {
continue;
}
synchronized (lock) {
String s = System.currentTimeMillis() + "";
System.out.println("porduce one " + s);
list.add(s);
if (list.size() > 10) {
startProduce = false;
startConsume = true;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private static class Consumer implements Runnable {
@Override
public void run() {
while (true) {
if (!startConsume) {
continue;
}
synchronized (lock) {
System.out.println("consume one " + list.get(0));
list.remove(0);
if (list.size() == 0) {
startProduce = true;
startConsume = false;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String... args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1);
for (int i = 0; i < 10; i++) {
new Thread(new Producer()).start();
new Thread(new Consumer()).start();
}
countDownLatch.await();
}
}
运行结果:
porduce one 1373469039014
porduce one 1373469039014
consume one 1373469039014
consume one 1373469039014
porduce one 1373469039014
consume one 1373469039014
porduce one 1373469039014
porduce one 1373469039014
porduce one 1373469039014
consume one 1373469039014
porduce one 1373469039019
porduce one 1373469039053
porduce one 1373469039065
porduce one 1373469039065
porduce one 1373469040034
porduce one 1373469040034
porduce one 1373469040034
porduce one 1373469040038
porduce one 1373469040038
consume one 1373469039014
consume one 1373469039014
consume one 1373469039019
consume one 1373469039053
consume one 1373469039065
consume one 1373469039065
consume one 1373469040034
consume one 1373469040034
consume one 1373469040034
consume one 1373469040038
分享到:
相关推荐
采用2个producer和一个Consumer把整数放入到(或者从中取出)一个环形缓冲Circle Buffer中,这块连续的存储会被反复使用。一个写指针指向数据写入的位置,如果写到Buffer的末端,则从Buffer的头端开始写。类似的,一...
当一个生产者任务正在访问缓冲区时,其他生产者和消费者任务不能访问缓冲区。当一个消费者任务正在访问缓冲区时,其他其他生产者和消费者任务不能访问缓冲区。使用互斥量实现对缓冲池的互斥访问。
Flex基于Producer和Consumer方式的简易消息推送机制
ProducerConsumer(生产者消费者问题的单线程模拟) vs2008
非常好的程序资源,一秒钟一千多条!
用信号量机制实现多个生产者—消费者问题,实现线程间的同步与互斥
1.一个大小为10的缓冲区,初始状态为空。 2.2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消费者取走数据之后再添加,重复10次。 3.2个消费者,随机等待一段时间,从缓冲区中读取数据,若...
c语言。生产者消费者问题的信号量解决代码。简洁明了
别人的太贵了,自己写一份分享!c语言实现生产者消费者模型,支持设置生产者消费者线程数量,支持设置消息数量。消息的组织形式为链表。生产者生产消息和消费者处理消息分别需要对应的条件变量。代码编译方式见注释
The use of producer-consumer questions helps to better understand threads.
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/1721530
java生产者消费者程序实现 线程,信号量互斥事件 临界资源
ProducerConsumer-CSharp
kafka集群搭建,开启sasl认证,并通过Python调用Producer和Consumer
57119101_王晨阳_ProducerConsumer1
Consumer_Producer_Exercise
著名的生产者消费者问题 在linux下实现 操作系统必备
代码在这里
single-producer, single-consumer lock-free queue
生产者消费者代码