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!
不明白出了什么问题,大家帮帮忙啊.
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!
不明白出了什么问题,大家帮帮忙啊.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货