1.封装队列
import java.util.LinkedList;
import java.util.Queue;
/**
* @ClassName QueueUtil
* @Description TODO
* @Author weizhi2018
* @Date 2013-9-6 下午01:46:59
*
*/
public class QueueUtil<T> {
//队列
private Queue<T> queue;
//队列长度
private int size = 10;
public QueueUtil(){
queue = new LinkedList<T>();
}
public QueueUtil(int size){
this.size = size;
queue = new LinkedList<T>();
}
public synchronized boolean put(T e){
if(queue.size() > size){
return false;
}
return queue.offer(e);
}
public synchronized T get(){
if(queue.isEmpty()){
return null;
}
return queue.poll();
}
}
2.生产者
/**
* @Project: TestQueue
* @Title: InQueue.java
* @Package:
* @Description: TODO
* @Author: weizhi2018 weizs_999@163.com
* @CreateDate: 2013-9-6 下午06:20:00
* @Copyright: 2013
* @Version: V1.0
*/
/**
* @ClassName InQueue
* @Description TODO
* @Author weizhi2018
* @Date 2013-9-6 下午06:20:00
*
*/
public class InQueue implements Runnable {
private QueueUtil<String> queue;
public InQueue(QueueUtil<String> queue) {
this.queue = queue;
}
/*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
if (queue.put(String.valueOf(i))) {
System.out.println(Thread.currentThread().getName() + " 写入 "
+ i);
}else{
System.out.println(Thread.currentThread().getName() + " 队列已满");
}
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
3.消费者
/**
* @Project: TestQueue
* @Title: InQueue.java
* @Package:
* @Description: TODO
* @Author: weizhi2018 weizs_999@163.com
* @CreateDate: 2013-9-6 下午06:20:00
* @Copyright: 2013
* @Version: V1.0
*/
/**
* @ClassName InQueue
* @Description TODO
* @Author weizhi2018
* @Date 2013-9-6 下午06:20:00
*
*/
public class OutQueue implements Runnable {
private QueueUtil<String> queue;
public OutQueue(QueueUtil<String> queue) {
this.queue = queue;
}
/*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
String outValue = queue.get();
if (outValue != null) {
System.out.println(Thread.currentThread().getName() + " 读出 "
+ outValue);
}else{
System.out.println(Thread.currentThread().getName() + "队列为空");
}
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
4.主运行程序
/**
* @Project: TestQueue
* @Title: QueueMain.java
* @Package:
* @Description: TODO
* @Author: weizhi2018 weizs_999@163.com
* @CreateDate: 2013-9-6 下午05:46:46
* @Copyright: 2013
* @Version: V1.0
*/
/**
* @ClassName QueueMain
* @Description TODO
* @Author weizhi2018
* @Date 2013-9-6 下午05:46:46
*
*/
public class QueueMain {
/**
* @Title main
* @Description TODO
* @Author weizhi2018
* @param args
* @throws
*/
public static void main(String[] args) {
QueueUtil<String> queue = new QueueUtil<String>(3);
InQueue inq = new InQueue(queue);
OutQueue outq = new OutQueue(queue);
new Thread(inq).start();
new Thread(outq).start();
new Thread(inq).start();
new Thread(outq).start();
new Thread(inq).start();
new Thread(outq).start();
}
}