生产者消费者模型(java)

基本数据类:

public class PCData{
    private long value;
    public void set(long value){
        this.value = value;
    }
    public long get(){
        return value;
    }
}

生产者:

import java.util.List;
import java.util.Random;

public class Producer implements Runnable{
    private List queue;
    private long length;

    public Producer(List 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() + "生产了" + 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();
        }
    }
}

消费者:

package version2;
import java.util.List;

public class Consumer implements Runnable{
    private List 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() + "消费了" + 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 queue = new ArrayList();
        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);
        
    }
}

你可能感兴趣的:(生产者消费者模型(java))