java用两个不同的线程处理单个对象,并提供所需的输出
如果我想用两个不同的线程更新单个对象,我该怎么做
我试过:
public class BankAccount{
private static int balance;
private static void balance(int amt)throws InterruptedException{
balance = amt;
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
try {
balance(10);
System.out.println("Initial Balance:\t"+balance);
} catch (InterruptedException ex) {
System.out.println("Exception"+ex.getMessage());
}
}
});
thread.start();
TimeUnit.SECONDS.sleep(5);
}
private static void deposit(int deposit){
balance+=deposit;
}
public static void main(String[] args)throws InterruptedException {
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
deposit(10);
System.out.println("Balance after deposit\t"+balance);
}
});
thread.start();
TimeUnit.SECONDS.sleep(5);
}
}
我知道使用单线程可以获得所需的输出:
初始余额:10 存款后余额:20
但如果有办法处理两个不同的线程
# 1 楼答案
您需要遵循以下步骤:
(1)使用
balance
作为AtomicInteger
使其线程安全(2)首先定义
showBalance()
、setBalance(int amt)
和deposit(int deposit)
方法(在代码中balance(int)
命名不正确,请将其称为setBalance(int amt)
以使其更有意义)(3)创建thread1并调用
setBalance(int amt)
(4)创建thread2并调用
showBalance()
(5)创建thread3并调用
deposit(int amt)
(5)启动线程
您可以参考以下代码: