线程同步(消费者与生产者)
来源:互联网 发布:txt转mobi软件 编辑:程序博客网 时间:2024/05/23 15:37
package com.t1009;
class Order {
/**
* 订单类
* */
private static int i = 0;
private int count = i++;
public Order() {
if (count == 10) {
System.out.println(" out of food,closing");
System.exit(0);
}
}
public String toString() {
return "Order " + count;
}
}
class WaitPerson extends Thread {
/**
* 服务员
* */
private Restaurant restaurant;
public WaitPerson(Restaurant r) {
this.restaurant = r;
start();
}
@Override
public void run() {
while (true) {
//如果没有订单,那么服务员wait()继续等待
while (restaurant.order == null) {
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//如果有订单,打印出订单号,并将订单标志为null,说明该订单已处理
System.out.println("WaitPerson got" + restaurant.order);
restaurant.order = null;
}
}
}
}
class Chef extends Thread {
/**
* 厨师
* */
private Restaurant restaurant;
private WaitPerson waitperson;
public Chef(Restaurant r, WaitPerson w) {
this.restaurant = r;
this.waitperson = w;
start();
}
@Override
public void run() {
while (true) {
if (restaurant.order == null) {
restaurant.order = new Order();
System.out.println("Order up!");
//厨师将订单上面的菜制作好后,将服务员唤醒
synchronized (waitperson) {
waitperson.notify();
}
}
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Restaurant {
/**
* 餐馆
* */
Order order;
public static void main(String[] args) {
Restaurant restaurant=new Restaurant();
WaitPerson waitPerson=new WaitPerson(restaurant);
Chef chef=new Chef(restaurant,waitPerson);
}
}
class Order {
/**
* 订单类
* */
private static int i = 0;
private int count = i++;
public Order() {
if (count == 10) {
System.out.println(" out of food,closing");
System.exit(0);
}
}
public String toString() {
return "Order " + count;
}
}
class WaitPerson extends Thread {
/**
* 服务员
* */
private Restaurant restaurant;
public WaitPerson(Restaurant r) {
this.restaurant = r;
start();
}
@Override
public void run() {
while (true) {
//如果没有订单,那么服务员wait()继续等待
while (restaurant.order == null) {
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//如果有订单,打印出订单号,并将订单标志为null,说明该订单已处理
System.out.println("WaitPerson got" + restaurant.order);
restaurant.order = null;
}
}
}
}
class Chef extends Thread {
/**
* 厨师
* */
private Restaurant restaurant;
private WaitPerson waitperson;
public Chef(Restaurant r, WaitPerson w) {
this.restaurant = r;
this.waitperson = w;
start();
}
@Override
public void run() {
while (true) {
if (restaurant.order == null) {
restaurant.order = new Order();
System.out.println("Order up!");
//厨师将订单上面的菜制作好后,将服务员唤醒
synchronized (waitperson) {
waitperson.notify();
}
}
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Restaurant {
/**
* 餐馆
* */
Order order;
public static void main(String[] args) {
Restaurant restaurant=new Restaurant();
WaitPerson waitPerson=new WaitPerson(restaurant);
Chef chef=new Chef(restaurant,waitPerson);
}
}
- 线程同步(消费者与生产者)
- java模拟生产者与消费者问题(线程同步)
- 同步线程--生产者与消费者模式
- 消费者与生产者线程同步程序
- C#生产者与消费者问题 线程同步
- 线程同步-生产者与消费者问题
- 线程同步:生产者与消费者模型
- 线程同步–生产者与消费者模式
- 生产者、消费者 线程同步
- 线程同步--生产者消费者
- 线程(消费者与生产者)
- 生产者消费者问题(线程同步)
- 线程同步学习笔记(生产者消费者)
- 生产者消费者模式(同步线程)
- 线程生产者与消费者
- 线程---生产者与消费者
- 线程同步之生产者消费者
- 线程同步生产者消费者问题
- Linux 内核的同步机制,第 1 部分(来自IBM)
- rtsp 管道方式 live555
- 关于保守与创新,核心竞争力与核心战略
- Android权限大全
- 分享~~遥感数据下载地址
- 线程同步(消费者与生产者)
- AEC DevBlog(Revit 二次开发)- 使用 Revit API 选取三维点
- 通用日志滚动脚本
- Android Kernel - Boot Loader +
- 赋值-读Thinking in java
- C语言代码风格II
- Maven添加本地依赖
- Redis应用案例,查找某个值的范围
- 线程间使用管道进行输入、输出