基本數(shù)據(jù)類:
public class PCData{
private long value;
public void set(long value){
this.value = value;
}
public long get(){
return value;
}
}
生產(chǎn)者:
import java.util.List;
import java.util.Random;
public class Producer implements Runnable{
private List<PCData> queue;
private long length;
public Producer(List<PCData> queue, long length) {
this.queue = queue;
this.length = length;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true) {
if(Thread.currentThread().isInterrupted())
break;
Random r = new Random();
long tmp = r.nextInt(100);
System.out.println(Thread.currentThread().getId() + "生產(chǎn)了" + tmp);
PCData data = new PCData();
data.set(tmp);
if(queue.size() >= length) {
queue.notifyAll();
queue.wait();
}else {
queue.add(data);
}
}
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
消費(fèi)者:
package version2;
import java.util.List;
public class Consumer implements Runnable{
private List<PCData> queue;
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true) {
if(Thread.currentThread().isInterrupted())
break;
PCData data = null;
synchronized (queue) {
if(queue.size() == 0) {
queue.wait();
queue.notifyAll();
}
data = queue.remove(0);
}
System.out.println(Thread.currentThread().getId() + "消費(fèi)了" + data.get());
}
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
Main:
package ProducterAndConsumer.Version2;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
List<PCData> queue = new ArrayList<PCData>();
int length = 10;
Producer p1 = new Producer(queue,length);
Producer p2 = new Producer(queue,length);
Producer p3 = new Producer(queue,length);
Consumer c1 = new Consumer(queue);
Consumer c2 = new Consumer(queue);
Consumer c3 = new Consumer(queue);
ExecutorService service = Executors.newCachedThreadPool();
service.execute(p1);
service.execute(p2);
service.execute(p3);
service.execute(c1);
service.execute(c2);
service.execute(c3);
}
}