这是与我以前提出的问题相同的代码,但解决了不同的问题。基本上,我试图用两个线程来建立银行账户,每个线程代表账户的用户。用户将随机存取20美元。一次运行一个线程(而不是并行)
但是,这两个线程并行运行,并且取款/存款同时发生。我想限制两个线程,以便它在执行自己的run方法之前等待其他线程完成。
下面列出的是代码。
创建线程类
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
public class BankAccount extends Thread{
public static double balance = 1000;
public String threadName;
BankAccount(String name){
threadName = name;
}
public void run(){
System.out.println(threadName + "account initiated.");
for(int i = 0; i < 10; i++){
try{
Random rand = new Random();
int num = rand.nextInt(2) + 1;
if(num == 1){
Thread.sleep(200); //0.2 seconds to deposit
System.out.println(threadName + " is depositing 20$ in the bank.");
balance += 20;
System.out.println("The new balance is " + balance + "dollars");
}
else{
Thread.sleep(500); //half a second to withdraw
System.out.println(threadName + " is withdrawing 20$ from the bank.");
balance -= 20;
System.out.println("The new balance is " + balance + "dollars.");
}
}
catch(InterruptedException e){
System.out.println("Process terminated.");
}
}
}
}
线程驱动程序类
public class BankAccountSimDriver {
public static void main(String[] args){
Thread user1 = new BankAccountSIm("user1");
Thread user2 = new BankAccountSIm("user2");
user1.start();
user2.start();
}
}
当前输出:
user1 initiated.
user2 initiated.
user1 is depositing 20$ in the bank.
user2 is depositing 20$ in the bank.
The new balance is 1020.0 dollars
The new balance is 1040.0 dollars
user2 is depositing 20$ in the bank.
The new balance is 1060.0 dollars
user1 is withdrawing 20$ from the bank.
The new balance is 1040.0 dollars.
目前,user1和user2在同一时间运行。我想编辑的代码,这样只有一个用户可以存入/收回在时间(由睡眠()时间间隔指示)
所以理想的输出:
user1 initiated.
//wait 0.2 seconds
user1 is depositing 20$ in the bank.
The new balance is 1020.0 dollars
user2 initiated.
//wait 0.2 seconds
user2 is depositing 20$ in the bank.
The new balance is 1040.0 dollars
//wait 0.5 seconds
user1 is withdrawing 20$ from the bank.
The new balance is 1020.0 dollars.
...
为什么你使用线程,如果你不想让它们同时运行? –
你正在做一个线程的存款和提款基于随机值。那么为什么你要开始第二个线程user2.start() –
我使用线程来模拟两个不同的人在一个帐户上执行操作,一次一个。是否有更简单或有效的替代方案? (Java的新手,你可以知道) –