gpt4 book ai didi

java - Head First java 书中的多线程示例。请解释一下

转载 作者:行者123 更新时间:2023-12-01 11:04:53 35 4
gpt4 key购买 nike

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());
}
}

}

在《Head First Java》书中,上述示例的输出是:

The Output

查看输出的第三行。那是 the third line

这会发生吗?即Monika可以在不输出退出语句的情况下从唤醒开始。 Monika 线程不应该以“Monika 即将退出”开头吗?这就是 Monika 线程如何以“Monika 醒来”语句开头。

我在 Netbeans 中尝试过,每次尝试时,都会以“Monika 即将撤回声明”开头。那么书上给出的输出是错误的吗?如果没有,请有人向我解释一下。再次感谢您的帮助。

最佳答案

只是图像从一开始就没有打印品。for 循环大约执行 10 次。如果您从 Monica 踩踏的底部开始计数,您只能看到 7 个半的迭代。

“抱歉,莫妮卡还不够”重复了 5 次

然后,当 Monica 线程进入休眠状态时,以下几行与 Ryan 的代码混合在一起,计算出 2 个半迭代。“莫妮卡要退出了”“莫妮卡要 sleep 了”“莫妮卡醒了。”“莫妮卡完成提现”

这意味着在此之前有更多输出。它只是不适合控制台。

关于java - Head First java 书中的多线程示例。请解释一下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053121/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com