package com.nowcode.www.demo;

import java.util.concurrent.BlockingQueue;

public class Producer implements Runnable{
    BlockingQueue<String> queue ;

    /**
     * @param queue
     */
    public Producer(BlockingQueue<String> queue) {
        super();
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            System.out.println("i hava made a product" + Thread.currentThread().getName());
            String temp = "consumer " + Thread.currentThread().getName();
            queue.put(temp);//如果队列满了就会阻塞
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
package com.nowcode.www.demo;

import java.util.concurrent.BlockingQueue;

public class Consumer implements Runnable{
    BlockingQueue<String> queue;
    
    /**
     * @param queue
     */
    public Consumer(BlockingQueue<String> queue) {
        super();
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            String temp = queue.take();//如果为空会阻塞
            System.out.println(temp);
        } catch (Exception e) {
            e.printStackTrace();
        
    }

}

package com.nowcode.www.demo;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class Main {
    public static void main(String[] args) {
        BlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
//设置2 ,不设置的话默认值为MAX_VALUE
        Producer p = new Producer(queue);
        Consumer c = new Consumer(queue);
        for (int i = 0; i < 10; i++) {
            new Thread(p,"produce" + i).start();
            new Thread(c, "consumer" + i).start();
        }
    }
}