Java线程小结(二)(三)

2014-11-24 08:54:10 · 作者: · 浏览: 6
tem.out.println(Thread.currentThread().getName() + "存钱:"
+ drawAmount);
balance += drawAmount;
System.out.println("账户余额为:" + balance);
// 将表示账户是否已有存款的标志设为true
flag = true;
// 唤醒其他线程
this.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 同步锁方式进行线程通信
public void getLock(double drawAmount) {
lock.lock();
try {
// 如果flag为true,表明账户中已有人存钱进去,存钱方法阻塞
if (!flag) {
cond.await();
} else {
if (balance >= drawAmount) {
// 执行取钱操作
System.out.println(Thread.currentThread().getName() + "取钱:"
+ drawAmount);
balance -= drawAmount;
System.out.println("账户余额为:" + balance);
// 将标志账户是否已有存款的标志设为false
flag = false;
// 唤醒其他线程
cond.signalAll();
} else {
System.out.println(Thread.currentThread().getName()
+ "取钱失败!余额不足!");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
// 同步锁方式进行线程通信
public void depositLock(double drawAmount) {
lock.lock();
try {
// 如果flag为true,表明账户中已有人存钱进去,存钱方法阻塞
if (flag) {
cond.await();
} else {
// 执行存款操作
System.out.println(Thread.currentThread().getName() + "存钱:"
+ drawAmount);
balance += drawAmount;
System.out.println("账户余额为:" + balance);
// 将表示账户是否已有存款的标志设为true
flag = true;
// 唤醒其他线程
cond.signalAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}