📄 savelock.java
字号:
//【例7.5】 互斥的存取款线程设计。
public class SaveLock extends Thread //带互斥锁的存款线程类
{
private Account account; //账户
private double value; //存款金额
public SaveLock(Account a1,double value)
{
this.account = a1;
this.value = value;
}
public void run()
{
synchronized(this.account) //声明临界区,锁定账户对象
{
double howmatch = this.account.balance();
try
{
sleep(1); //花费时间
}
catch(InterruptedException e) {}
if (this.account.put(this.value))
System.out.println(this.account.getName()+"账户:现有"+howmatch+
", 存入"+this.value+", 余额"+this.account.balance());
}
}
}
class FetchLock extends Thread //带互斥锁的取款线程类
{
private Account account;
private double value;
public FetchLock(Account a1,double value)
{
this.account = a1;
this.value = value;
}
public void run()
{
synchronized(this.account) //声明临界区,锁定账户对象
{
double howmatch = this.account.balance();
try
{
sleep(1); //花费时间
}
catch(InterruptedException e) {}
System.out.println(this.account.getName()+"账户:现有"+howmatch+
", 取走"+this.account.get(this.value)+", 余额"+this.account.balance());
}
}
public static void main(String args[])
{
Account wang = new Account("Wang");
(new SaveLock(wang,100)).start();
(new SaveLock(wang,200)).start();
(new FetchLock(wang,300)).start();
}
}
/*
程序运行结果如下:
Wang账户:现有0.0, 存入100.0, 余额100.0
Wang账户:现有100.0, 存入200.0, 余额300.0
Wang账户:现有300.0, 取走300.0, 余额0.0
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -