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();
}
}
}