Java同一个单位的会计和出纳都可以访问同样的银行账户信息。请编写多线程的程序正确运用同步机制模拟会计和出纳对银行账户信息的并发访问。
以下是一个简单的Java多线程程序,模拟会计和出纳对银行账户信息的并发访问。该程序使用了同步机制来确保线程安全。
public class BankAccount {
private int balance;
public BankAccount(int initialBalance) {
balance = initialBalance;
}
public synchronized void deposit(int amount) {
balance += amount;
}
public synchronized void withdraw(int amount) {
balance -= amount;
}
public synchronized int getBalance() {
return balance;
}
}
public class Accountant implements Runnable {
private BankAccount account;
public Accountant(BankAccount account) {
this.account = account;
}
public void run() {
for (int i = 0; i < 10000; i++) {
account.deposit(1);
}
}
}
public class Cashier implements Runnable {
private BankAccount account;
public Cashier(BankAccount account) {
this.account = account;
}
public void run() {
for (int i = 0; i < 10000; i++) {
account.withdraw(1);
}
}
}
public class Bank {
public static void main(String[] args) {
BankAccount account = new BankAccount(10000);
Thread t1 = new Thread(new Accountant(account));
Thread t2 = new Thread(new Cashier(account));
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final balance: " + account.getBalance());
}
}
在上述程序中,BankAccount类表示银行账户,其中deposit()和withdraw()方法用于存款和取款,getBalance()方法用于获取账户余额。这些方法都被声明为synchronized,以确保线程安全。
Accountant和Cashier类分别表示会计和出纳,它们都实现了Runnable接口,并在run()方法中对银行账户进行操作。
Bank类是程序的主类,它创建一个BankAccount对象,并创建两个线程分别代表会计和出纳,并启动它们。在两个线程完成操作后,Bank类打印出最终的账户余额。
使用synchronized关键字确保线程安全是Java多线程编程的一种基本技术。在本例中,synchronized关键字用于确保多个线程在访问共享资源时不会产生竞争条件
原文地址: https://www.cveoy.top/t/topic/fkax 著作权归作者所有。请勿转载和采集!