Java多线程同步与死锁问题解析
1. 多线程同步的必要性
在涉及实际资金的现实环境中,如果多个线程同时访问内存中的相同数据,可能会导致不可接受的结果。例如,三个线程( main() 方法和两个银行柜员线程)同时访问银行账户余额数据时,可能会使客户看似损失了资金。在处理像银行账户余额这样的数据敏感信息时,多个线程访问数据应该轮流进行。比如,当进行存款操作时,在存款完成之前,不应允许其他影响余额的交易。
2. synchronized关键字
为了使类具有线程安全性,可以利用Java语言内置的同步特性,使用 synchronized 关键字。该关键字会创建一个被称为临界区的代码块,每个具有临界区代码的Java对象都会关联一个锁。线程要进入临界区,需要获取相应对象的锁。
以下是使用 synchronized 关键字的示例:
public void deposit(double amount)
{
synchronized(this)
{
double prevBalance = balance;
try
{
Thread.sleep(4000);
}catch(InterruptedException e)
{}
balance = prevBalance + amount;
}
}
也可以将整个方法声明为
超级会员免费看
订阅专栏 解锁全文
1096

被折叠的 条评论
为什么被折叠?



