class BankAccount
{
private int balance = 100;
public int getBalance()
{
return balance;
}
public void withdraw(int amount)
{
balance = balance - amount;
}
}
public class RyanAndMonicaJob implements Runnable{
private BankAccount account = new BankAccount();
public static void main(String[] args) {
RyanAndMonicaJob theJob = new RyanAndMonicaJob();
Thread one = new Thread(theJob);
Thread two = new Thread(theJob);
one.setName("Ryan");
two.setName("Monica");
one.start();
two.start();
}
public void run()
{
for(int x = 0;x < 10;x++)
{
makeWithdrawl(10);
if(account.getBalance() < 10)
{
System.out.println("Overdrawn!");
}
}
}
public void makeWithdrawl(int amount)
{
if(account.getBalance() >= amount)
{
System.out.println(Thread.currentThread().getName() + " is about to withdraw");
try{
System.out.println(Thread.currentThread().getName() + " is going to sleep");
Thread.sleep(500);
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " woke up.");
account.withdraw(amount);
System.out.println(Thread.currentThread().getName() + " completes the withdrawl");
}
else
{
System.out.println("Sorry , not enough for " + Thread.currentThread().getName());
}
}
}
在第一本Java书籍中,上述示例的输出为:
参见输出的第三行。
那是
这会发生吗?
那莫妮卡可以从唤醒而不开始输出撤消语句开始。 Monika线程也不应以“ Monika即将退出”开头。这就是Monika线程如何以“ Monika wake up”语句开头的原因。
我在Netbeans中尝试过,每次尝试时,它都以“ Monika将要撤回声明”开头。
那么书中给出的输出是错误的吗?
如果不能,请给我解释一下。
再次感谢您的帮助。
最佳答案
只是从开始就没有图像打印。
for循环大约10次。如果从底部开始倒数莫妮卡(Monica)踏板,则只能看到7个半迭代。
重复5次“对不起,莫妮卡”
然后,当Monica线程进入睡眠状态时,以下与Ryan混杂在一起的行将进行2次半迭代。
“莫妮卡即将撤离”
“莫妮卡要睡觉了”
“莫妮卡醒了。”
“莫妮卡完成了提款”
这意味着在此之前会有更多的输出。它只是不完全适合控制台。