线程协作,producer and consumer.
2011-03-21 14:23
239 查看
from:http://www.java-samples.com/showtutorial.php?tutorialid=306
//Q.java 代表队列,存数据 package com.test.threadcooperate; //A correct implementation of a producer and consumer. public class Q { int n; volatile boolean valueSet = false; public synchronized int get() { if (!valueSet) try { wait(); // 无限等待 // wait(4000); //每过4秒继续执行一次 } catch (InterruptedException e) { System.out.println("InterruptedException caught"); } System.out.println(Thread.currentThread() + ",ThreadID:" + Thread.currentThread().getId() + " Got: " + n); valueSet = false; notifyAll(); return n; } synchronized void put(int n) { if (valueSet) try { wait(); } catch (InterruptedException e) { System.out.println("InterruptedException caught"); } this.n = n; valueSet = true; System.out.println("Put: " + n); notifyAll(); } } //producer.java package com.test.threadcooperate; public class Producer implements Runnable { Q q; Producer(Q q) { this.q = q; new Thread(this, "Producer").start(); } public void run() { int i = 0; // while (true) { // q.put(i++); // } for(;i<100;) { q.put(i++); } q.put(-1); //用于退出,状态标志 } } //consumer.java package com.test.threadcooperate; public class Consumer implements Runnable { Q q; Consumer(Q q) { this.q = q; new Thread(this, "Consumer").start(); } public void run() { while (true) { int result= q.get(); if(result==-1)break; } } } //PCFixed.java package com.test.threadcooperate; public class PCFixed { /** * @param args */ public static void main(String[] args) { Q q = new Q(); new Producer(q); new Consumer(q); //消费者1 // new Consumer(q); //消费者2,有两个消费者时有问题。 System.out.println("Press Control-C to stop."); } }
相关文章推荐
- java 线程 ProducerAndConsumer
- java 线程 ProducerAndConsumer
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- 线程问题:生产者(Producer)与消费者(Consumer)
- Apache Kafka - KIP-42: Add Producer and Consumer Interceptors
- Java Lock and Condition Example using Producer Consumer Solution
- producer and consumer 算法
- C# Thread 多线程 Monitor 锁 Producer And Consumer 生产者和消费者 经典模型
- Producer Consumer problem - mutex and semaphore
- Python KafkaProducer and KafkaConsumer的开发模块
- producer and consumer concept ( I )
- Java Consumer and Producer demo
- MULTITHREADING - PRODUCER AND CONSUMER WITH QUEUE
- classic problem: producer and consumer
- python producer and consumer
- Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)
- Python MultiProducer and MultiConsumer
- producer and consumer
- producer and consumer concept ( II )
- golang for thread channel routine consumer and producer