生产者
package org.lulu.learn;
import java.util.HashSet;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.LinkedBlockingDeque;
/**
* Project: Day09
* Created: Lulu
* Date: 2016/8/6
*
* 生产者和消费者模型
*/
public class Test02 {
public static void main(String[] args) {
//ArrayDeque是线程不安全的,不能使用
Queue queue = new LinkedBlockingDeque();//仓库
// boolean[] isFinish = {false};
Set<Thread> creators = new HashSet<>();
Creator creator = new Creator(queue, creators);
Customer customer = new Customer(queue, creators);
new Thread(creator, "生产者 1").start();
new Thread(creator, "生产者 2").start();
new Thread(creator, "生产者 3").start();
while (creators.isEmpty()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
new Thread(customer).start();
new Thread(customer).start();
new Thread(customer).start();
}
}
消费者
package org.lulu.learn;
import java.util.Queue;
import java.util.Set;
/**
* Project: Day09
* Created: Lulu
* Date: 2016/8/6
*/
public class Customer implements Runnable {
private Queue<String> queue;
//生产是否完成的变量 bool类型的引用
// private boolean[] isFinsh;
private Set<Thread> creators;
public Customer(Queue<String> queue, Set<Thread> creators) {
this.queue = queue;
// this.isFinsh = isFinsh;
this.creators = creators;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (queue) {
if (queue.isEmpty()) {
if (creators.isEmpty()) {
break;
} else {
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else {
System.out.println("消费了" + queue.poll());
}
}
}
}
}
测试类
package org.lulu.learn;
import java.util.HashSet;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.LinkedBlockingDeque;
/**
* Project: Day09
* Created: Lulu
* Date: 2016/8/6
*
* 生产者和消费者模型
*/
public class Test02 {
public static void main(String[] args) {
//ArrayDeque是线程不安全的,不能使用
Queue queue = new LinkedBlockingDeque();//仓库
// boolean[] isFinish = {false};
Set<Thread> creators = new HashSet<>();
Creator creator = new Creator(queue, creators);
Customer customer = new Customer(queue, creators);
new Thread(creator, "生产者 1").start();
new Thread(creator, "生产者 2").start();
new Thread(creator, "生产者 3").start();
while (creators.isEmpty()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
new Thread(customer).start();
new Thread(customer).start();
new Thread(customer).start();
}
}
效果图: