当前位置:实例文章 » JAVA Web实例» [文章]多线程并发场景题(持续更新)

多线程并发场景题(持续更新)

发布人: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`:共享数据,客户的账户余额。

**持续更新**

* 支持更多类型的交易请求,如转账、汇率等。
* 增强系统的安全性和可靠性。
* 支持多种支付方式,如微信、支付宝等。

相关标签:算法java开发语言
其他信息

其他资源

Top