package pb.threadCommunicateion;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/** 账户类,用面向对象的DDD设计模式来设计 */
/*
* DDD领域驱动模式,即将每个类都认为是一个完备的领域对象, 例如Account代表账户类,那么就应该提供用户账户的相关方法(存,取,转),而不是将
* setXXX方法暴露出来任人操作。 只要设计到DDD就需要重写equals和hashcode来判断对象的一致性
*/
public class Account {
// 账户编码
private String accountNo;
// 账户余额
private double balance;
// 标示账户是否已有存款(此项目为了测试存入款就需要马上取出)
private boolean flag = false;
// private final Lock lock=new ReentrantLock();
// private final Condition cond=lock.newCondition();
public Account() {
super();
}
public Account(String accountNo, double balance) {
super();
this.accountNo = accountNo;
this.balance = balance;
}
// 取款(利用同步方法)
public synchronized void draw(double drawAmount) {
// 如果flag为假,没人存款进去,取钱方法(利用wait)阻塞(wait阻塞时,当前线程会释放同步监视器)
try {
if (!flag) {
this.wait();//条件 cond.await();
}
//否则执行取钱
else
{ // System.out.println("账户余额:"+balance);
System.out.println(Thread.currentThread().getName()+"---->取钱:"+drawAmount);
balance-=drawAmount;
System.out.println("账户余额: "+balance);
//设置flag(限定一个操作只能取一次钱)
flag=false;
//唤醒其他wait()线程
this.notifyAll();//cond.signalAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//存款
public synchronized void deposit(double depositAmount){
//如果flag为真,证明有人存钱了,存钱阻塞
try {
if (flag) {
this.wait(); //cond.await();
}
//否则执行存款
else
{ // System.out.println("账户余额:"+balance);
System.out.println(Thread.currentThread().getName()+"---->存钱:"+depositAmount);
balance+=depositAmount;
System.out.println("账户余额: "+balance);
//设置flag(限定一个操作只能取一次钱)
flag=true;
//唤醒其他wait()线程
this.notifyAll(); //cond.signalAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// DDD设计模式重写equals和hashcode(判断用户是否一致,只需要判断他们的账号编码就可以了,不需要再判断整个对象,提高性能)
@Override
public int hashCode() {
return accountNo.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj != null && obj.getClass() == Account.class) {
Account account = (Account) obj;
return account.getAccountNo().equals(accountNo);
}
return false;
}
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;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java多线程笔记全手打
共61个文件
class:31个
java:26个
classpath:1个
4星 · 超过85%的资源 需积分: 10 29 下载量 123 浏览量
2011-11-06
22:03:32
上传
评论
收藏 156KB ZIP 举报
温馨提示
多线程学习笔记 包含doc文档笔记加笔记中出现的代码(博文地址共上中下)http://blog.csdn.net/cloudyxuq/article/details/6941404
资源推荐
资源详情
资源评论
收起资源包目录
多线程笔记.zip (61个子文件)
threadDemo
src
pb
CallableThread
TestCallable.java 1007B
CallableThread.java 607B
createThread
FirstThread.java 650B
SecondThread.java 726B
ThreadLocalVar
ThreadLocalVarTest.java 2KB
threadGroup
TestThread.java 356B
ThreadGroupTest.java 799B
ThreadPool
ThreadPoolTest.java 685B
pipedCommunication
TestPiped.java 545B
WriterThread.java 896B
ReaderThread.java 894B
controlThread
JoinThread.java 1KB
SleepThread.java 466B
DaemonThread.java 905B
YieldThread.java 1KB
threadCommunicateion
Account.java 3KB
Test.java 605B
DepositThread.java 501B
DrawThread.java 449B
exceptionThread
ExHandler.java 837B
lockThread
Accout.java 1KB
DrawThread.java 1KB
TestDraw.java 526B
safeThread
Accout.java 1KB
DrawThread.java 1KB
TestDraw.java 526B
bin
pb
CallableThread
CallableThread.class 1KB
TestCallable.class 2KB
createThread
SecondThread.class 1KB
FirstThread.class 1KB
ThreadLocalVar
MyThread.class 1KB
ThreadLocalVarTest.class 1KB
Accout.class 1KB
threadGroup
ThreadGroupTest.class 2KB
TestThread.class 1KB
ThreadPool
ThreadPoolTest.class 862B
TestThread.class 986B
pipedCommunication
WriterThread.class 2KB
ReaderThread.class 2KB
TestPiped.class 1KB
controlThread
SleepThread.class 1KB
YieldThread.class 1KB
DaemonThread.class 2KB
JoinThread.class 1KB
threadCommunicateion
DrawThread.class 718B
Account.class 3KB
DepositThread.class 733B
Test.class 973B
exceptionThread
MyThread.class 377B
MyEx.class 1001B
ExHandler.class 1005B
lockThread
DrawThread.class 2KB
TestDraw.class 1KB
Accout.class 1KB
safeThread
DrawThread.class 1KB
TestDraw.class 1KB
Accout.class 1KB
.classpath 301B
.settings
org.eclipse.jdt.core.prefs 629B
.project 386B
多线程笔记.doc 440KB
共 61 条
- 1
资源评论
- zhangzeguang882014-11-08整体写的不错。学习了。
- qq_240210892017-07-17谢谢楼主分享,学习了。
- jdb_9762013-06-16内容挺基础,我写论文借鉴下。谢谢
Tinker77
- 粉丝: 23
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功