gpt4 book ai didi

java - Java 并发的困难时期

转载 作者:行者123 更新时间:2023-12-02 07:43:55 24 4
gpt4 key购买 nike

所以,我很难解决大学问题......我需要做的是:

我需要创建一个应用程序来使用并发模拟帐户之间的转账。我需要创建一个方法来在 Bank 类中进行这种转移,如下所示:

transfer(int from, int to, int value)

然后我需要创建一个 TransferThread 类来管理此传输。

问题是我一直陷入僵局......到目前为止我所做的:

传输线程:

public void run() {
int para,de,valor;
try
{
while(!interrupted())
{
para = new Random().nextInt(banco.getNUMCONTAS());
de = new Random().nextInt(banco.getNUMCONTAS());
valor = (int) (10000 * Math.random());
if(de == para)
continue;
banco.transfer(de, para, valor);
sleep(1);
}
}catch(InterruptedException e)
{
System.out.println(e.getMessage());
}
}

银行:

  public synchronized void transfer(int de, int para, int valor) {
while(contas[de].getSaldo() - valor <= 0)
{
try
{
wait();
}catch(InterruptedException e)
{

}
}
notifyAll();
contas[de].setSaldo(-valor);
contas[para].setSaldo(valor);
System.out.println("Conta num: " + contas[de].getNum() + ". Saldo: " + contas[de].getSaldo());
System.out.println("Conta num: " + contas[para].getNum() + ". Saldo: " + contas[para].getSaldo());
}

主要:

Banco b = new Banco();
TransferThread[] threads = new TransferThread[2];
for(int i = 0; i < 2; i++){
threads[i] = new TransferThread(b);
threads[i].start();
}

我怎样才能做到这一点?

最佳答案

尽管在向学生介绍线程时经常使用银行示例,但它旨在教授的常规思想并不是代码中的问题。

出于某种原因,当帐户中没有足够的钱时,您似乎会永远等待,而且,如果两个线程都等待,它就不会神奇地出现在那里!他们都陷入了无限循环。

关于java - Java 并发的困难时期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11167325/

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