一个关于线程的问题,请帮忙!

yangliyun2008 2008-03-29 04:09:16
class Ham{
static Object box =new Object();
static int totalMaterialA=5;
static int totalMaterialB=7;
static int salesA=0;
static int salesB=0;
static int productionA=2;
static int productionB=3;
}
class Maker extends Thread{
void makeA(){
synchronized (Ham.box){
Ham.productionA++;
System.out.println("厨师: 这里有A汉堡!(总"+Ham.productionA+"个)");
Ham.box.notify();
}
}
void makeB(){
synchronized (Ham.box){
Ham.productionB++;
System.out.println("厨师: 这里有B汉堡!(总"+Ham.productionB+"个)");
Ham.box.notify();
}
}

public void run(){
if(getName()=="A"){
while(Ham.productionA<Ham.totalMaterialA){
try{
sleep(3000);
}catch(InterruptedException ie){}
makeA();
}
}
if(getName()=="B"){
while(Ham.productionB<Ham.totalMaterialB){
try{
sleep(4000);
}catch(InterruptedException ie){}
makeB();
}
}
}
}

class HAssistant2 extends Thread{
void sellA(){
synchronized (Ham.box){
if(Ham.productionA==Ham.salesA){
System.out.println("请您稍等A!");
try{
Ham.box.wait();
}catch(InterruptedException ie){}
}
if(Ham.productionA>Ham.salesA){
Ham.salesA++;
System.out.println("顾客朋友们,A汉堡上来了.(总"+Ham.salesA+"个)");
}
}
}
void sellB(){
synchronized (Ham.box){
if(Ham.productionB==Ham.salesB){
System.out.println("请您稍等B!");
try{
Ham.box.wait();
}catch(InterruptedException ie){}
}
if(Ham.productionB>Ham.salesB){
Ham.salesB++;
System.out.println("顾客朋友们,B汉堡上来了.(总"+Ham.salesB+"个)");
}
}
}
public void run(){
while(Ham.salesA<Ham.totalMaterialA){
System.out.println("<顾客订购A汉堡包.>");

sellA();
try{
sleep(1000);
}catch(InterruptedException ie){}
}
while(Ham.salesB<Ham.totalMaterialB){
System.out.println("<顾客订购B汉堡包.>");

sellB();
try{
sleep(2000);
}catch(InterruptedException ie){}
}
}
}
public class Synchronization6 {
public Synchronization6() {
}

public static void main(String[] args) {
Maker makerA=new Maker();
Maker makerB=new Maker();
makerA.setName("A");
makerB.setName("B");
HAssistant2 assistant=new HAssistant2();
makerA.start();
makerB.start();
assistant.start();

}

}
程序没有显示错误,但是结果运行到这里却不动了
<顾客订购A汉堡包.>
顾客朋友们,A汉堡上来了.(总1个)
<顾客订购A汉堡包.>
顾客朋友们,A汉堡上来了.(总2个)
<顾客订购A汉堡包.>
请您稍等A!
不明白出了什么问题,大家帮帮忙啊.
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashutc 2008-03-29
  • 打赏
  • 举报
回复
来晚了,呵呵
yangliyun2008 2008-03-29
  • 打赏
  • 举报
回复
真是谢谢2楼了,原来是这样啊!这个错误真是低级啊,见笑了.
Ant 2008-03-29
  • 打赏
  • 举报
回复
呵呵,我跑了跑,其实没啥大问题!这个程序写得还可以

楼主只是犯了一个低级错误,就是Make的run方法从来没执行你没注意到么?看看为什么,那两个if里面都是getName()=="A"

我想你是写C#习惯了么?Java比较字符串可不是这么比的哦!

改过来就OK了,完毕!
numb1126 2008-03-29
  • 打赏
  • 举报
回复
没仔细看程序。但是可以判断,100%是由于程序死锁了,所以才会不动了。请您稍等A! 后面好象没有notify的缘故?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧