import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
/**
* Created by 风凌渡口 on 2017/6/21.
*/
public class TestThread {
public static void main(String[] args) throws InterruptedException {
Queue queue = new ArrayBlockingQueue(5);
Thread user1 = new MeituanUserThread(queue, "饺子");
user1.setName("郭靖");
user1.setPriority(1);
user1.start();
Thread user2 = new MeituanUserThread(queue, "扒鸡");
user2.setName("洪七公");
user2.setPriority(5);
user2.start();
Thread user3 = new MeituanUserThread(queue, "披萨");
user3.setName("黄蓉");
user3.start();
Thread user4 = new MeituanUserThread(queue, "蜂蜜");
user4.setName("龙儿");
user4.start();
Thread user5 = new MeituanUserThread(queue, "苹果");
user5.setName("郭襄");
user5.setPriority(10);
user5.start();
Thread knight = new MeituanKnightThread(queue);
knight.setName("美团骑士杨过");
knight.setPriority(10);
knight.start();
Thread.sleep(10000);
Thread user6 = new MeituanUserThread(queue, "西湖醋鱼");
user6.setName("程英");
user6.setPriority(10);
user6.start();
}
}
class MeituanKnightThread extends Thread{
private Queue queue;
public MeituanKnightThread(Queue queue) {
this.queue = queue;
}
@Override
public void run() {
while(true){
synchronized (queue){
while (queue.size() == 0){
try {
System.out.println("暂时没有订单----------------------");
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("通知用户取餐---------------------");
queue.notifyAll();
}
}
}
}
class MeituanUserThread extends Thread{
private Queue queue;
private String foodName;
public MeituanUserThread(Queue queue, String foodName) {
this.queue = queue;
this.foodName = foodName;
synchronized (queue){
queue.add(foodName);
}
}
@Override
public void run() {
while (true){
synchronized (queue){
String food = (String) queue.peek();
if(null == food || !food.equals(foodName)){
try {
System.out.println(Thread.currentThread().getName() + "正在等餐" + food);
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
queue.poll();
System.out.println(Thread.currentThread().getName() + "已取餐" + food);
queue.notifyAll();
stop();
}
}
}
}
}
控制台截取:
洪七公正在等餐饺子
黄蓉正在等餐饺子
郭襄正在等餐饺子
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
龙儿正在等餐饺子
郭靖已取餐饺子
龙儿正在等餐扒鸡
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
洪七公已取餐扒鸡
黄蓉已取餐披萨
郭襄正在等餐蜂蜜
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
通知用户取餐———————
龙儿已取餐蜂蜜
郭襄已取餐苹果
暂时没有订单———————-
程英已取餐西湖醋鱼
暂时没有订单———————-