某个汉堡店有1名厨师,2名营业员A和B,厨师每3秒钟制作一个汉堡,制作完的汉堡放到柜台上,柜台上同时最多放5个汉堡,每当客人购买汉堡时,营业员从柜台上取汉堡,营业员取汉堡的时间为1~4秒随机的。编程实现这个应用,厨师和营业员都用线程实现,并打印出厨师制作汉堡和哪个营业员拿汉堡的提示。
解决方案 »
- Comparator未能实现List<Integer> 倒序排序
- 谁来帮我讲解一下这道题~~~谢谢
- 关于导入包的问题的一点疑惑,请大家指教.
- 如何得到String[]的元素个数?
- 小弟刚学完一本叫《Java 程序设计教程》附加一本练习册,中国水利水电出版社的(学校发的),就我现在的水平(基础),请大哥们推荐一本适合
- 菜鸟问题:字符串转换成时间类型?????
- applet中连接数据库出问题
- jni问题?
- 现在网上有没有jbuilder5下载
- 谁能帮我详细解释:SwingUtilities.invokeLater()与SwingUtilities.invokeAndWait()
- 关于JAVA swing的问题,请大家帮忙。
- JAVA 文件改名?
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Hamburger {
private List<String> list = new ArrayList<String>();
private Random random = new Random(4L);
class Customer extends Thread{
private String name;
public Customer(String name){
super();
this.name = name;
}
public void run(){
while(true){
try {
sleep((random.nextInt(4)+1)*1000);
if(list.size()>0){
list.remove(0);
System.out.println(name + ": got a hamburger!");
}else{
System.out.println(name + ": there is no hamburgers");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Cooker extends Thread{
public void run(){
while(true){
try {
sleep(3000);
if(list.size()<5){
list.add("hamburger");
System.out.println("cooker: add a hamburger!");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
Hamburger hamburger = new Hamburger();
Cooker cooker = hamburger.new Cooker();
Customer customerA = hamburger.new Customer("customerA");
Customer customerB = hamburger.new Customer("customerB");
cooker.start();
customerA.start();
customerB.start();
}
}仅供参考
import java.util.List;
import java.util.Random;public class Hamburger {
private List<String> list = new ArrayList<String>();
private Random random = new Random(4L);
private synchronized void getHamburger(String name)
{
if(list.size()>0){
System.out.println(name + ": got a hamburger!");
list.remove(0);
}else{
System.out.println(name + ": there is no hamburgers");
}
}
class Customer extends Thread{
private String name;
public Customer(String name){
super();
this.name = name;
}
public void run(){
while(true){
try {
sleep((random.nextInt(4)+1)*1000);
getHamburger(name);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Cooker extends Thread{
public void run(){
while(true){
try {
sleep(3000);
if(list.size()<5){
list.add("hamburger");
System.out.println("cooker: add a hamburger!");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
Hamburger hamburger = new Hamburger();
Cooker cooker = hamburger.new Cooker();
Customer customerA = hamburger.new Customer("customerA");
Customer customerB = hamburger.new Customer("customerB");
cooker.start();
customerA.start();
customerB.start();
}
}
修改楼上
package org.leelin.interview;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class ProducerCustomer { public static void main(String[] args) {
Hamburger h = new Hamburger();
Cook c = new Cook(h);
Assistant a1 = new Assistant(h);
Assistant a2 = new Assistant(h);
c.start();
a1.start();
a2.start();
}}class Hamburger {
List<String> list = new ArrayList<String>(); String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String pop() {
return (String) list.remove(list.size() - 1);
} public void push(String name) {
list.add(name);
}
}class Cook extends Thread {
private Hamburger h; public Cook(Hamburger h) {
this.h = h;
} @Override
public void run() {
while (true) {
synchronized (h) {
if (h.list.size() >= 0 && h.list.size() <= 4) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException("发生异常");
}
String str = "hamburger" + System.currentTimeMillis();
System.out.println(this.getName() + " cook push the " + str);
h.push(str);
}
yield();
}
}
}
}class Assistant extends Thread {
private Hamburger h; public Assistant(Hamburger h) {
this.h = h;
} @Override
public void run() {
while (true) {
synchronized (h) {
if (h.list.size() >= 1) {
try {
Thread.sleep((new Random().nextInt(4) + 1) * 1000);
} catch (InterruptedException e1) {
throw new RuntimeException("发生异常");
}
System.out.println(this.getName() + " assistant pop the "
+ h.pop());
}
}
yield();
}
}
}