gpt4 book ai didi

java - Java中的两个线程不是多线程

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

我的代码:

  Test.java

public class Test {

public static void main(String[] args) {

Account acc = new Account();

Thread1 t1 = new Thread1(acc);
Thread2 t2 = new Thread2(acc);
Thread t = new Thread(t2);


t1.start();
t.start();



/*
for(int i=0;i<10;i++){
System.out.println("Main Thread : "+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/


}

}

Thread1.java

public class Thread1 extends Thread {

Account acc;

public Thread1(Account acc){
super();
this.acc=acc;
}

@Override
public void run() {

for(int i=0;i<10;i++){
acc.withdraw(100);
}

}

}

Thread2.java

public class Thread2 implements Runnable {

Account acc;

public Thread2(Account acc){
super();
this.acc=acc;
}

public void run() {

for(int i=0;i<10;i++){
acc.deposit(100);
}

}
}

帐户.java

public class Account {

volatile int balance = 500;

public synchronized void withdraw(int amount){
try {
if(balance<=0){
wait();
}

balance=balance-amount;
Thread.sleep(100);
System.out.println("Withdraw : "+balance);

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public synchronized void deposit(int amount){
try {
balance = balance+amount;
Thread.sleep(100);
System.out.println("Deposit : "+balance);

notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

OUTPUT:
Withdraw : 400
Withdraw : 300
Withdraw : 200
Withdraw : 100
Withdraw : 0
Deposit : 100
Deposit : 200
Deposit : 300
Deposit : 400
Deposit : 500

我试图在这段代码中实现的是多线程。我希望 thread1 和 thread2 同时运行,正如您在输出中看到的那样,它并不是以这种方式运行的。

它首先运行所有提款,然后运行存款。我希望取款和存款以随机方式同时运行。它在不应该串行运行的时候却串行运行。请让我知道我的代码哪里出了问题。

最佳答案

我相信您的代码正在并行运行。

由于迭代次数太少,我认为您实际上不会遇到任何竞争条件。我建议您在代码中添加随机 sleep ,也许还添加一些锁来引发人为争用。

此外,请考虑命名您的线程并连接 jvisualvm 应用程序以检查正在运行的线程。

关于java - Java中的两个线程不是多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44504486/

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