多线程并发场景题(持续更新)
发布人: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`:共享数据,客户的账户余额。
**持续更新**
* 支持更多类型的交易请求,如转账、汇率等。
* 增强系统的安全性和可靠性。
* 支持多种支付方式,如微信、支付宝等。