java多线程-生产者消费者经典问题 基于BlockingQueue
2016-08-04 11:26
1026 查看
BlockingQueue 可以安全地与多个生产者和多个使用者一起使用
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
queue.put(produce());
Thread.currentThread().sleep(500);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Object produce() {
System.out.println("produce---" + Thread.currentThread().getName());
return "produce";
}
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
consume(queue.take());
Thread.currentThread().sleep(10000);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(Object x) {
System.out.println("consume+++" + Thread.currentThread().getName());
}
}
public class Test {
public static void main(String[] args) {
BlockingQueue q = new ArrayBlockingQueue<>(20);
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
queue.put(produce());
Thread.currentThread().sleep(500);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Object produce() {
System.out.println("produce---" + Thread.currentThread().getName());
return "produce";
}
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
consume(queue.take());
Thread.currentThread().sleep(10000);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(Object x) {
System.out.println("consume+++" + Thread.currentThread().getName());
}
}
public class Test {
public static void main(String[] args) {
BlockingQueue q = new ArrayBlockingQueue<>(20);
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
相关文章推荐
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java多线程实现生产者与消费者---经典问题
- java多线程经典的生产者消费者问题
- 多线程经典问题之生产者消费者问题的JAVA实现
- java多线程之生产者消费者经典问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者和消费者经典问题案例
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java 多线程经典例子——生产者与消费者的问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- 多线程经典案例——生产者/消费者问题的Java实现与详解
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java例程练习(多线程综合练习[生产者-消费者问题])
- java多线程之生产者与消费者问题的简单模拟
- Java 多线程 生产者与消费者问题测试代码
- 基于Java多线程机制的生产者-消费者模型模拟