Chinaunix
标题:
多线程模拟对同一个账户,一个来存款一个来取款
[打印本页]
作者:
QCHuangChao
时间:
2015-07-13 11:01
标题:
多线程模拟对同一个账户,一个来存款一个来取款
多线程访问共享数据
package thread;
/**
* 多线程模拟一个存 一个取,存完通知另一个来取
*/
public class ImitateDepositDrawTheadTest {
public static void main(String[] args) {
final DepositOrWithdrawBusiness business = new DepositOrWithdrawBusiness(1000);
new Thread(new Runnable(){
@Override
public void run() {
while(true){
business.deposit();
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
while(true){
business.withdraw();
}
}
}).start();
}
}
class DepositOrWithdrawBusiness{
int balance = 1000;
public DepositOrWithdrawBusiness(int balance){
this.balance = balance;
}
boolean isWithdraw = false;
public synchronized void deposit(){
if(isWithdraw){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
balance = balance+300;
System.out.println(Thread.currentThread().getName()+ " deposit $300,now balance:" + balance);
isWithdraw=true;
this.notify();
}
public synchronized void withdraw(){
if(!isWithdraw){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
balance = balance-300;
System.out.println(Thread.currentThread().getName()+ " withdraw $300,now balance:" + balance);
isWithdraw=false;
this.notify();
}
}
复制代码
运行结果:
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
Thread-0 deposit $300,now balance:1300
Thread-1 withdraw $300,now balance:1000
。。。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2