多线程并发场景题(持续更新)
发布人:shili8
发布时间:2024-11-18 02:45
阅读次数:0
**多线程并发场景题**
在软件开发中,多线程并发是非常常见的场景。多线程可以提高程序的执行效率、响应速度和用户体验。但是,多线程也会带来一些挑战,如数据共享、同步问题等。
**场景描述**
我们有一个银行系统,需要处理多个客户的交易请求。每个客户的交易请求可能包括存款、取款、转账等操作。这些交易请求需要在短时间内完成,以保证客户的交易体验。
**需求**
1. 支持多线程并发:系统需要支持多线程并发,才能处理多个客户的交易请求。
2. 数据共享:系统需要共享数据,如客户信息、账户余额等。
3. 同步问题:系统需要解决同步问题,如避免多线程同时修改同一数据。
**代码示例**
javaimport java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BankSystem {
// 共享数据:客户信息、账户余额等 private static Lock lock = new ReentrantLock();
private static int accountBalance =1000; // 初始账户余额 public void deposit(int amount) {
// 加锁,避免多线程同时修改同一数据 lock.lock();
try {
System.out.println("客户存款:" + amount);
accountBalance += amount;
System.out.println("当前账户余额:" + accountBalance);
} finally {
lock.unlock();
}
}
public void withdraw(int amount) {
// 加锁,避免多线程同时修改同一数据 lock.lock();
try {
System.out.println("客户取款:" + amount);
if (amount > accountBalance) {
System.out.println("余额不足!");
return;
}
accountBalance -= amount;
System.out.println("当前账户余额:" + accountBalance);
} finally {
lock.unlock();
}
}
public void transfer(int toAccount, int amount) {
// 加锁,避免多线程同时修改同一数据 lock.lock();
try {
System.out.println("客户转账:" + amount + "元到账户" + toAccount);
if (amount > accountBalance) {
System.out.println("余额不足!");
return;
}
accountBalance -= amount;
System.out.println("当前账户余额:" + accountBalance);
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
BankSystem bank = new BankSystem();
// 多线程并发测试 Thread thread1 = new Thread(() -> bank.deposit(500));
Thread thread2 = new Thread(() -> bank.withdraw(200));
Thread thread3 = new Thread(() -> bank.transfer(1000,300));
thread1.start();
thread2.start();
thread3.start();
try {
thread1.join();
thread2.join();
thread3.join();
} catch (InterruptedException e) {
System.out.println("线程异常中断!");
}
}
}
**注释**
* `lock.lock()`:加锁,避免多线程同时修改同一数据。
* `try-finally`块:确保在执行完代码块后解锁,以防止死锁。
* `accountBalance`:共享数据,客户的账户余额。
**持续更新**
* 支持更多类型的交易请求,如转账、汇率等。
* 增强系统的安全性和可靠性。
* 支持多种支付方式,如微信、支付宝等。

