一个例子:

Account.java 客户实体类

 package com.asiainfo.test.thread8;
/**
* 账户类
* @author luke
*
*/
public class Account {
private String accNo;//账户编号
private double balance;//账户余额
private boolean flag = false;// 标识账户中是否已有存款 //构造方法,同时设账户编号和账户余额
public Account (String accountNo,double balance) {
this.accNo = accountNo;
this.balance = balance;
} public String getAccNo() {
return accNo;
}
public void setAccNo(String accNo) {
this.accNo = accNo;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
} /**
* 存钱
* @param depositAmout
* @param i
*/
public synchronized void deposit(double depositAmout,int i){
if(flag){
try {
System.out.println(Thread.currentThread().getName() + "开始执行wati操作" + " 执行了wait操作" + "-- i =" + i);
wait();
System.out.println(Thread.currentThread().getName() + "执行了wait操作" + " 执行了wait操作" + "-- i =" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.println(Thread.currentThread().getName() + " 存款:" + depositAmout + " -- i=" + i);
this.setBalance(balance + depositAmout);
flag = true;
//唤醒其他线程
notifyAll();
System.out.println(Thread.currentThread().getName() + "-- 存钱 -- 执行完毕" + " -- i=" + i);
}
} /**
* 取钱
* @param drawAmount
* @param i
*/
public synchronized void draw(double drawAmount,int i){
if(!flag){
try {
System.out.println(Thread.currentThread().getName() + " 开始要执行wait操作" + " 执行了wait操作" + " -- i=" + i);
wait();
System.out.println(Thread.currentThread().getName() + " 执行了wait操作" + " 执行了wait操作" + " -- i=" + i);
} catch (InterruptedException e) {
e.printStackTrace();
} } else {
System.out.println(Thread.currentThread().getName() + " 取钱:" + drawAmount + " -- i=" + i);
this.setBalance(balance - drawAmount);
flag = false;
//唤醒其他线程
notifyAll();
System.out.println(Thread.currentThread().getName() + "-- 取钱 -- 执行完毕" + " -- i=" + i); //
} } }

DepositeMoneyThread.java  存钱线程

 package com.asiainfo.test.thread8;

 /**
* 存款线程
* @author hasee
*
*/
public class DepositeMoneyThread extends Thread {
private Account account;
private double amount; public DepositeMoneyThread(String threadName, Account account, double amount) {
super(threadName);
this.account = account;
this.amount = amount;
}
public void run() {
for (int i = 0; i < 100; i++) {
account.deposit(amount, i);
}
System.out.println(account.getBalance());
}
}

DrawMoneyThread.java  取钱线程

 package com.asiainfo.test.thread8;

 /**
* 取现线程
* @author luke
*
*/
public class DrawMoneyThread extends Thread {
private Account account;
private double amount; public DrawMoneyThread(String threadName, Account account, double amount) {
super(threadName);
this.account = account;
this.amount = amount;
} public void run() {
for (int i = 0; i < 100; i++) {
if(account.getBalance()>= amount){
account.draw(amount, i);
}
}
} }

ThreadTest.java 测试类

 package com.asiainfo.test.thread8;

 /**
* 测试类
* @author luke
*
*/
public class ThreadTest {
public static void main(String[] args) {
Account account = new Account("001",1000); Thread thread1 = new DrawMoneyThread("取钱线程",account,700);
Thread thread2 = new DepositeMoneyThread("存钱线程",account,700);
thread1.start();
thread2.start(); }
}

测试结果:

取钱线程 开始要执行wait操作 执行了wait操作 -- i=0
存钱线程 存款:700.0 -- i=0
存钱线程-- 存钱 -- 执行完毕 -- i=0
存钱线程开始执行wati操作 执行了wait操作-- i =1
取钱线程 执行了wait操作 执行了wait操作 -- i=0
取钱线程 取钱:700.0 -- i=1
取钱线程-- 取钱 -- 执行完毕 -- i=1
取钱线程 开始要执行wait操作 执行了wait操作 -- i=2
存钱线程执行了wait操作 执行了wait操作-- i =1
存钱线程 存款:700.0 -- i=2
存钱线程-- 存钱 -- 执行完毕 -- i=2
存钱线程开始执行wati操作 执行了wait操作-- i =3
取钱线程 执行了wait操作 执行了wait操作 -- i=2
取钱线程 取钱:700.0 -- i=3
取钱线程-- 取钱 -- 执行完毕 -- i=3
取钱线程 开始要执行wait操作 执行了wait操作 -- i=4
存钱线程执行了wait操作 执行了wait操作-- i =3
存钱线程 存款:700.0 -- i=4
存钱线程-- 存钱 -- 执行完毕 -- i=4
存钱线程开始执行wati操作 执行了wait操作-- i =5
取钱线程 执行了wait操作 执行了wait操作 -- i=4
取钱线程 取钱:700.0 -- i=5
取钱线程-- 取钱 -- 执行完毕 -- i=5
取钱线程 开始要执行wait操作 执行了wait操作 -- i=6
存钱线程执行了wait操作 执行了wait操作-- i =5
存钱线程 存款:700.0 -- i=6
存钱线程-- 存钱 -- 执行完毕 -- i=6
存钱线程开始执行wati操作 执行了wait操作-- i =7
取钱线程 执行了wait操作 执行了wait操作 -- i=6
取钱线程 取钱:700.0 -- i=7
取钱线程-- 取钱 -- 执行完毕 -- i=7
取钱线程 开始要执行wait操作 执行了wait操作 -- i=8
存钱线程执行了wait操作 执行了wait操作-- i =7
存钱线程 存款:700.0 -- i=8
存钱线程-- 存钱 -- 执行完毕 -- i=8
存钱线程开始执行wati操作 执行了wait操作-- i =9
取钱线程 执行了wait操作 执行了wait操作 -- i=8
取钱线程 取钱:700.0 -- i=9
取钱线程-- 取钱 -- 执行完毕 -- i=9
取钱线程 开始要执行wait操作 执行了wait操作 -- i=10
存钱线程执行了wait操作 执行了wait操作-- i =9
存钱线程 存款:700.0 -- i=10
存钱线程-- 存钱 -- 执行完毕 -- i=10
存钱线程开始执行wati操作 执行了wait操作-- i =11
取钱线程 执行了wait操作 执行了wait操作 -- i=10
取钱线程 取钱:700.0 -- i=11
取钱线程-- 取钱 -- 执行完毕 -- i=11
取钱线程 开始要执行wait操作 执行了wait操作 -- i=12
存钱线程执行了wait操作 执行了wait操作-- i =11
存钱线程 存款:700.0 -- i=12
存钱线程-- 存钱 -- 执行完毕 -- i=12
存钱线程开始执行wati操作 执行了wait操作-- i =13
取钱线程 执行了wait操作 执行了wait操作 -- i=12
取钱线程 取钱:700.0 -- i=13
取钱线程-- 取钱 -- 执行完毕 -- i=13
取钱线程 开始要执行wait操作 执行了wait操作 -- i=14
存钱线程执行了wait操作 执行了wait操作-- i =13
存钱线程 存款:700.0 -- i=14
存钱线程-- 存钱 -- 执行完毕 -- i=14
存钱线程开始执行wati操作 执行了wait操作-- i =15
取钱线程 执行了wait操作 执行了wait操作 -- i=14
取钱线程 取钱:700.0 -- i=15
取钱线程-- 取钱 -- 执行完毕 -- i=15
取钱线程 开始要执行wait操作 执行了wait操作 -- i=16
存钱线程执行了wait操作 执行了wait操作-- i =15
存钱线程 存款:700.0 -- i=16
存钱线程-- 存钱 -- 执行完毕 -- i=16
存钱线程开始执行wati操作 执行了wait操作-- i =17
取钱线程 执行了wait操作 执行了wait操作 -- i=16
取钱线程 取钱:700.0 -- i=17
取钱线程-- 取钱 -- 执行完毕 -- i=17
取钱线程 开始要执行wait操作 执行了wait操作 -- i=18
存钱线程执行了wait操作 执行了wait操作-- i =17
存钱线程 存款:700.0 -- i=18
存钱线程-- 存钱 -- 执行完毕 -- i=18
存钱线程开始执行wati操作 执行了wait操作-- i =19
取钱线程 执行了wait操作 执行了wait操作 -- i=18
取钱线程 取钱:700.0 -- i=19
取钱线程-- 取钱 -- 执行完毕 -- i=19
取钱线程 开始要执行wait操作 执行了wait操作 -- i=20
存钱线程执行了wait操作 执行了wait操作-- i =19
存钱线程 存款:700.0 -- i=20
存钱线程-- 存钱 -- 执行完毕 -- i=20
存钱线程开始执行wati操作 执行了wait操作-- i =21
取钱线程 执行了wait操作 执行了wait操作 -- i=20
取钱线程 取钱:700.0 -- i=21
取钱线程-- 取钱 -- 执行完毕 -- i=21
取钱线程 开始要执行wait操作 执行了wait操作 -- i=22
存钱线程执行了wait操作 执行了wait操作-- i =21
存钱线程 存款:700.0 -- i=22
存钱线程-- 存钱 -- 执行完毕 -- i=22
存钱线程开始执行wati操作 执行了wait操作-- i =23
取钱线程 执行了wait操作 执行了wait操作 -- i=22
取钱线程 取钱:700.0 -- i=23
取钱线程-- 取钱 -- 执行完毕 -- i=23
取钱线程 开始要执行wait操作 执行了wait操作 -- i=24
存钱线程执行了wait操作 执行了wait操作-- i =23
存钱线程 存款:700.0 -- i=24
存钱线程-- 存钱 -- 执行完毕 -- i=24
存钱线程开始执行wati操作 执行了wait操作-- i =25
取钱线程 执行了wait操作 执行了wait操作 -- i=24
取钱线程 取钱:700.0 -- i=25
取钱线程-- 取钱 -- 执行完毕 -- i=25
取钱线程 开始要执行wait操作 执行了wait操作 -- i=26
存钱线程执行了wait操作 执行了wait操作-- i =25
存钱线程 存款:700.0 -- i=26
存钱线程-- 存钱 -- 执行完毕 -- i=26
存钱线程开始执行wati操作 执行了wait操作-- i =27
取钱线程 执行了wait操作 执行了wait操作 -- i=26
取钱线程 取钱:700.0 -- i=27
取钱线程-- 取钱 -- 执行完毕 -- i=27
取钱线程 开始要执行wait操作 执行了wait操作 -- i=28
存钱线程执行了wait操作 执行了wait操作-- i =27
存钱线程 存款:700.0 -- i=28
存钱线程-- 存钱 -- 执行完毕 -- i=28
存钱线程开始执行wati操作 执行了wait操作-- i =29
取钱线程 执行了wait操作 执行了wait操作 -- i=28
取钱线程 取钱:700.0 -- i=29
取钱线程-- 取钱 -- 执行完毕 -- i=29
取钱线程 开始要执行wait操作 执行了wait操作 -- i=30
存钱线程执行了wait操作 执行了wait操作-- i =29
存钱线程 存款:700.0 -- i=30
存钱线程-- 存钱 -- 执行完毕 -- i=30
存钱线程开始执行wati操作 执行了wait操作-- i =31
取钱线程 执行了wait操作 执行了wait操作 -- i=30
取钱线程 取钱:700.0 -- i=31
取钱线程-- 取钱 -- 执行完毕 -- i=31
取钱线程 开始要执行wait操作 执行了wait操作 -- i=32
存钱线程执行了wait操作 执行了wait操作-- i =31
存钱线程 存款:700.0 -- i=32
存钱线程-- 存钱 -- 执行完毕 -- i=32
存钱线程开始执行wati操作 执行了wait操作-- i =33
取钱线程 执行了wait操作 执行了wait操作 -- i=32
取钱线程 取钱:700.0 -- i=33
取钱线程-- 取钱 -- 执行完毕 -- i=33
取钱线程 开始要执行wait操作 执行了wait操作 -- i=34
存钱线程执行了wait操作 执行了wait操作-- i =33
存钱线程 存款:700.0 -- i=34
存钱线程-- 存钱 -- 执行完毕 -- i=34
存钱线程开始执行wati操作 执行了wait操作-- i =35
取钱线程 执行了wait操作 执行了wait操作 -- i=34
取钱线程 取钱:700.0 -- i=35
取钱线程-- 取钱 -- 执行完毕 -- i=35
取钱线程 开始要执行wait操作 执行了wait操作 -- i=36
存钱线程执行了wait操作 执行了wait操作-- i =35
存钱线程 存款:700.0 -- i=36
存钱线程-- 存钱 -- 执行完毕 -- i=36
存钱线程开始执行wati操作 执行了wait操作-- i =37
取钱线程 执行了wait操作 执行了wait操作 -- i=36
取钱线程 取钱:700.0 -- i=37
取钱线程-- 取钱 -- 执行完毕 -- i=37
取钱线程 开始要执行wait操作 执行了wait操作 -- i=38
存钱线程执行了wait操作 执行了wait操作-- i =37
存钱线程 存款:700.0 -- i=38
存钱线程-- 存钱 -- 执行完毕 -- i=38
存钱线程开始执行wati操作 执行了wait操作-- i =39
取钱线程 执行了wait操作 执行了wait操作 -- i=38
取钱线程 取钱:700.0 -- i=39
取钱线程-- 取钱 -- 执行完毕 -- i=39
取钱线程 开始要执行wait操作 执行了wait操作 -- i=40
存钱线程执行了wait操作 执行了wait操作-- i =39
存钱线程 存款:700.0 -- i=40
存钱线程-- 存钱 -- 执行完毕 -- i=40
存钱线程开始执行wati操作 执行了wait操作-- i =41
取钱线程 执行了wait操作 执行了wait操作 -- i=40
取钱线程 取钱:700.0 -- i=41
取钱线程-- 取钱 -- 执行完毕 -- i=41
取钱线程 开始要执行wait操作 执行了wait操作 -- i=42
存钱线程执行了wait操作 执行了wait操作-- i =41
存钱线程 存款:700.0 -- i=42
存钱线程-- 存钱 -- 执行完毕 -- i=42
存钱线程开始执行wati操作 执行了wait操作-- i =43
取钱线程 执行了wait操作 执行了wait操作 -- i=42
取钱线程 取钱:700.0 -- i=43
取钱线程-- 取钱 -- 执行完毕 -- i=43
取钱线程 开始要执行wait操作 执行了wait操作 -- i=44
存钱线程执行了wait操作 执行了wait操作-- i =43
存钱线程 存款:700.0 -- i=44
存钱线程-- 存钱 -- 执行完毕 -- i=44
存钱线程开始执行wati操作 执行了wait操作-- i =45
取钱线程 执行了wait操作 执行了wait操作 -- i=44
取钱线程 取钱:700.0 -- i=45
取钱线程-- 取钱 -- 执行完毕 -- i=45
取钱线程 开始要执行wait操作 执行了wait操作 -- i=46
存钱线程执行了wait操作 执行了wait操作-- i =45
存钱线程 存款:700.0 -- i=46
存钱线程-- 存钱 -- 执行完毕 -- i=46
存钱线程开始执行wati操作 执行了wait操作-- i =47
取钱线程 执行了wait操作 执行了wait操作 -- i=46
取钱线程 取钱:700.0 -- i=47
取钱线程-- 取钱 -- 执行完毕 -- i=47
取钱线程 开始要执行wait操作 执行了wait操作 -- i=48
存钱线程执行了wait操作 执行了wait操作-- i =47
存钱线程 存款:700.0 -- i=48
存钱线程-- 存钱 -- 执行完毕 -- i=48
存钱线程开始执行wati操作 执行了wait操作-- i =49
取钱线程 执行了wait操作 执行了wait操作 -- i=48
取钱线程 取钱:700.0 -- i=49
取钱线程-- 取钱 -- 执行完毕 -- i=49
取钱线程 开始要执行wait操作 执行了wait操作 -- i=50
存钱线程执行了wait操作 执行了wait操作-- i =49
存钱线程 存款:700.0 -- i=50
存钱线程-- 存钱 -- 执行完毕 -- i=50
存钱线程开始执行wati操作 执行了wait操作-- i =51
取钱线程 执行了wait操作 执行了wait操作 -- i=50
取钱线程 取钱:700.0 -- i=51
取钱线程-- 取钱 -- 执行完毕 -- i=51
取钱线程 开始要执行wait操作 执行了wait操作 -- i=52
存钱线程执行了wait操作 执行了wait操作-- i =51
存钱线程 存款:700.0 -- i=52
存钱线程-- 存钱 -- 执行完毕 -- i=52
存钱线程开始执行wati操作 执行了wait操作-- i =53
取钱线程 执行了wait操作 执行了wait操作 -- i=52
取钱线程 取钱:700.0 -- i=53
取钱线程-- 取钱 -- 执行完毕 -- i=53
取钱线程 开始要执行wait操作 执行了wait操作 -- i=54
存钱线程执行了wait操作 执行了wait操作-- i =53
存钱线程 存款:700.0 -- i=54
存钱线程-- 存钱 -- 执行完毕 -- i=54
存钱线程开始执行wati操作 执行了wait操作-- i =55
取钱线程 执行了wait操作 执行了wait操作 -- i=54
取钱线程 取钱:700.0 -- i=55
取钱线程-- 取钱 -- 执行完毕 -- i=55
取钱线程 开始要执行wait操作 执行了wait操作 -- i=56
存钱线程执行了wait操作 执行了wait操作-- i =55
存钱线程 存款:700.0 -- i=56
存钱线程-- 存钱 -- 执行完毕 -- i=56
存钱线程开始执行wati操作 执行了wait操作-- i =57
取钱线程 执行了wait操作 执行了wait操作 -- i=56
取钱线程 取钱:700.0 -- i=57
取钱线程-- 取钱 -- 执行完毕 -- i=57
取钱线程 开始要执行wait操作 执行了wait操作 -- i=58
存钱线程执行了wait操作 执行了wait操作-- i =57
存钱线程 存款:700.0 -- i=58
存钱线程-- 存钱 -- 执行完毕 -- i=58
存钱线程开始执行wati操作 执行了wait操作-- i =59
取钱线程 执行了wait操作 执行了wait操作 -- i=58
取钱线程 取钱:700.0 -- i=59
取钱线程-- 取钱 -- 执行完毕 -- i=59
取钱线程 开始要执行wait操作 执行了wait操作 -- i=60
存钱线程执行了wait操作 执行了wait操作-- i =59
存钱线程 存款:700.0 -- i=60
存钱线程-- 存钱 -- 执行完毕 -- i=60
存钱线程开始执行wati操作 执行了wait操作-- i =61
取钱线程 执行了wait操作 执行了wait操作 -- i=60
取钱线程 取钱:700.0 -- i=61
取钱线程-- 取钱 -- 执行完毕 -- i=61
取钱线程 开始要执行wait操作 执行了wait操作 -- i=62
存钱线程执行了wait操作 执行了wait操作-- i =61
存钱线程 存款:700.0 -- i=62
存钱线程-- 存钱 -- 执行完毕 -- i=62
存钱线程开始执行wati操作 执行了wait操作-- i =63
取钱线程 执行了wait操作 执行了wait操作 -- i=62
取钱线程 取钱:700.0 -- i=63
取钱线程-- 取钱 -- 执行完毕 -- i=63
取钱线程 开始要执行wait操作 执行了wait操作 -- i=64
存钱线程执行了wait操作 执行了wait操作-- i =63
存钱线程 存款:700.0 -- i=64
存钱线程-- 存钱 -- 执行完毕 -- i=64
存钱线程开始执行wati操作 执行了wait操作-- i =65
取钱线程 执行了wait操作 执行了wait操作 -- i=64
取钱线程 取钱:700.0 -- i=65
取钱线程-- 取钱 -- 执行完毕 -- i=65
取钱线程 开始要执行wait操作 执行了wait操作 -- i=66
存钱线程执行了wait操作 执行了wait操作-- i =65
存钱线程 存款:700.0 -- i=66
存钱线程-- 存钱 -- 执行完毕 -- i=66
存钱线程开始执行wati操作 执行了wait操作-- i =67
取钱线程 执行了wait操作 执行了wait操作 -- i=66
取钱线程 取钱:700.0 -- i=67
取钱线程-- 取钱 -- 执行完毕 -- i=67
取钱线程 开始要执行wait操作 执行了wait操作 -- i=68
存钱线程执行了wait操作 执行了wait操作-- i =67
存钱线程 存款:700.0 -- i=68
存钱线程-- 存钱 -- 执行完毕 -- i=68
存钱线程开始执行wati操作 执行了wait操作-- i =69
取钱线程 执行了wait操作 执行了wait操作 -- i=68
取钱线程 取钱:700.0 -- i=69
取钱线程-- 取钱 -- 执行完毕 -- i=69
取钱线程 开始要执行wait操作 执行了wait操作 -- i=70
存钱线程执行了wait操作 执行了wait操作-- i =69
存钱线程 存款:700.0 -- i=70
存钱线程-- 存钱 -- 执行完毕 -- i=70
存钱线程开始执行wati操作 执行了wait操作-- i =71
取钱线程 执行了wait操作 执行了wait操作 -- i=70
取钱线程 取钱:700.0 -- i=71
取钱线程-- 取钱 -- 执行完毕 -- i=71
取钱线程 开始要执行wait操作 执行了wait操作 -- i=72
存钱线程执行了wait操作 执行了wait操作-- i =71
存钱线程 存款:700.0 -- i=72
存钱线程-- 存钱 -- 执行完毕 -- i=72
存钱线程开始执行wati操作 执行了wait操作-- i =73
取钱线程 执行了wait操作 执行了wait操作 -- i=72
取钱线程 取钱:700.0 -- i=73
取钱线程-- 取钱 -- 执行完毕 -- i=73
取钱线程 开始要执行wait操作 执行了wait操作 -- i=74
存钱线程执行了wait操作 执行了wait操作-- i =73
存钱线程 存款:700.0 -- i=74
存钱线程-- 存钱 -- 执行完毕 -- i=74
存钱线程开始执行wati操作 执行了wait操作-- i =75
取钱线程 执行了wait操作 执行了wait操作 -- i=74
取钱线程 取钱:700.0 -- i=75
取钱线程-- 取钱 -- 执行完毕 -- i=75
取钱线程 开始要执行wait操作 执行了wait操作 -- i=76
存钱线程执行了wait操作 执行了wait操作-- i =75
存钱线程 存款:700.0 -- i=76
存钱线程-- 存钱 -- 执行完毕 -- i=76
存钱线程开始执行wati操作 执行了wait操作-- i =77
取钱线程 执行了wait操作 执行了wait操作 -- i=76
取钱线程 取钱:700.0 -- i=77
取钱线程-- 取钱 -- 执行完毕 -- i=77
取钱线程 开始要执行wait操作 执行了wait操作 -- i=78
存钱线程执行了wait操作 执行了wait操作-- i =77
存钱线程 存款:700.0 -- i=78
存钱线程-- 存钱 -- 执行完毕 -- i=78
存钱线程开始执行wati操作 执行了wait操作-- i =79
取钱线程 执行了wait操作 执行了wait操作 -- i=78
取钱线程 取钱:700.0 -- i=79
取钱线程-- 取钱 -- 执行完毕 -- i=79
取钱线程 开始要执行wait操作 执行了wait操作 -- i=80
存钱线程执行了wait操作 执行了wait操作-- i =79
存钱线程 存款:700.0 -- i=80
存钱线程-- 存钱 -- 执行完毕 -- i=80
存钱线程开始执行wati操作 执行了wait操作-- i =81
取钱线程 执行了wait操作 执行了wait操作 -- i=80
取钱线程 取钱:700.0 -- i=81
取钱线程-- 取钱 -- 执行完毕 -- i=81
取钱线程 开始要执行wait操作 执行了wait操作 -- i=82
存钱线程执行了wait操作 执行了wait操作-- i =81
存钱线程 存款:700.0 -- i=82
存钱线程-- 存钱 -- 执行完毕 -- i=82
存钱线程开始执行wati操作 执行了wait操作-- i =83
取钱线程 执行了wait操作 执行了wait操作 -- i=82
取钱线程 取钱:700.0 -- i=83
取钱线程-- 取钱 -- 执行完毕 -- i=83
取钱线程 开始要执行wait操作 执行了wait操作 -- i=84
存钱线程执行了wait操作 执行了wait操作-- i =83
存钱线程 存款:700.0 -- i=84
存钱线程-- 存钱 -- 执行完毕 -- i=84
存钱线程开始执行wati操作 执行了wait操作-- i =85
取钱线程 执行了wait操作 执行了wait操作 -- i=84
取钱线程 取钱:700.0 -- i=85
取钱线程-- 取钱 -- 执行完毕 -- i=85
取钱线程 开始要执行wait操作 执行了wait操作 -- i=86
存钱线程执行了wait操作 执行了wait操作-- i =85
存钱线程 存款:700.0 -- i=86
存钱线程-- 存钱 -- 执行完毕 -- i=86
存钱线程开始执行wati操作 执行了wait操作-- i =87
取钱线程 执行了wait操作 执行了wait操作 -- i=86
取钱线程 取钱:700.0 -- i=87
取钱线程-- 取钱 -- 执行完毕 -- i=87
取钱线程 开始要执行wait操作 执行了wait操作 -- i=88
存钱线程执行了wait操作 执行了wait操作-- i =87
存钱线程 存款:700.0 -- i=88
存钱线程-- 存钱 -- 执行完毕 -- i=88
存钱线程开始执行wati操作 执行了wait操作-- i =89
取钱线程 执行了wait操作 执行了wait操作 -- i=88
取钱线程 取钱:700.0 -- i=89
取钱线程-- 取钱 -- 执行完毕 -- i=89
取钱线程 开始要执行wait操作 执行了wait操作 -- i=90
存钱线程执行了wait操作 执行了wait操作-- i =89
存钱线程 存款:700.0 -- i=90
存钱线程-- 存钱 -- 执行完毕 -- i=90
存钱线程开始执行wati操作 执行了wait操作-- i =91
取钱线程 执行了wait操作 执行了wait操作 -- i=90
取钱线程 取钱:700.0 -- i=91
取钱线程-- 取钱 -- 执行完毕 -- i=91
取钱线程 开始要执行wait操作 执行了wait操作 -- i=92
存钱线程执行了wait操作 执行了wait操作-- i =91
存钱线程 存款:700.0 -- i=92
存钱线程-- 存钱 -- 执行完毕 -- i=92
存钱线程开始执行wati操作 执行了wait操作-- i =93
取钱线程 执行了wait操作 执行了wait操作 -- i=92
取钱线程 取钱:700.0 -- i=93
取钱线程-- 取钱 -- 执行完毕 -- i=93
取钱线程 开始要执行wait操作 执行了wait操作 -- i=94
存钱线程执行了wait操作 执行了wait操作-- i =93
存钱线程 存款:700.0 -- i=94
存钱线程-- 存钱 -- 执行完毕 -- i=94
存钱线程开始执行wati操作 执行了wait操作-- i =95
取钱线程 执行了wait操作 执行了wait操作 -- i=94
取钱线程 取钱:700.0 -- i=95
取钱线程-- 取钱 -- 执行完毕 -- i=95
取钱线程 开始要执行wait操作 执行了wait操作 -- i=96
存钱线程执行了wait操作 执行了wait操作-- i =95
存钱线程 存款:700.0 -- i=96
存钱线程-- 存钱 -- 执行完毕 -- i=96
存钱线程开始执行wati操作 执行了wait操作-- i =97
取钱线程 执行了wait操作 执行了wait操作 -- i=96
取钱线程 取钱:700.0 -- i=97
取钱线程-- 取钱 -- 执行完毕 -- i=97
取钱线程 开始要执行wait操作 执行了wait操作 -- i=98
存钱线程执行了wait操作 执行了wait操作-- i =97
存钱线程 存款:700.0 -- i=98
存钱线程-- 存钱 -- 执行完毕 -- i=98
存钱线程开始执行wati操作 执行了wait操作-- i =99
取钱线程 执行了wait操作 执行了wait操作 -- i=98
取钱线程 取钱:700.0 -- i=99
取钱线程-- 取钱 -- 执行完毕 -- i=99
存钱线程执行了wait操作 执行了wait操作-- i =99
1000.0

java多线程(四)的更多相关文章

  1. java 多线程四

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...

  2. java多线程(四)-自定义线程池

    当我们使用 线程池的时候,可以使用 newCachedThreadPool()或者 newFixedThreadPool(int)等方法,其实我们深入到这些方法里面,就可以看到它们的是实现方式是这样的 ...

  3. Java多线程(四) 线程池

    一个优秀的软件不会随意的创建.销毁线程,因为创建和销毁线程需要耗费大量的CPU时间以及需要和内存做出大量的交互.因此JDK5提出了使用线程池,让程序员把更多的精力放在业务逻辑上面,弱化对线程的开闭管理 ...

  4. java多线程四种实现模板

    假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程? 这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快... 这里把模板放在这里,需要用的时候寻找合适的来选用. 总体分为两 ...

  5. Java多线程(四) —— 线程并发库之Atomic

    一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下 ...

  6. java多线程(四)之同步机制

    1.同步的前提 多个线程 多个线程使用的是同一个锁 2.同步的好处 同步的出现解决了多线程的安全问题 3.同步的弊端 当线程较多时, 因为每个线程都会去判断同步上的锁, 这样是很耗费资源的, 会降低程 ...

  7. JAVA多线程(四) Executor并发框架向RabbitMQ推送消息

    github代码地址: https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service ...

  8. Java多线程——<四>让线程有返回值

    一.概述 到目前为止,我们已经能够声明并使一个线程任务运行起来了.但是遇到一个问题:现在定义的任务都没有任何返回值,那么加入我们希望一个任务运行结束后告诉我一个结果,该结果表名任务执行成功或失败,此时 ...

  9. Java多线程——<八>多线程其他概念

    一.概述 到第八节,就把多线程基本的概念都说完了.把前面的所有文章加连接在此: Java多线程——<一>概述.定义任务 Java多线程——<二>将任务交给线程,线程声明及启动 ...

随机推荐

  1. redis过期时间设置

    方法一: $redis->setex(,'huahua'); 方法二: $redis->set('name','huahua'); $redis->expire('name',3);

  2. python-ASCII与Unicode

    # Auther: Aaron Fan'''ASCII:不支持中文,1个英文占1个字节Unicode(万国码,支持所有国家的文字显示):支持中文,但是每个英文和中文都占2个字节UTF-8(是一种针对U ...

  3. 用MODI OCR 21种语言

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2007.12.08更新:2012.07.09按照<MODI中的OCR模块>一文相关内容进行修订2012.07.0 ...

  4. Django之后台管理二

    前面讲到admin界面用户的注册以及修改,如果我们注册的用户密码忘记了该怎么办呢 在终端输入如下的命令进行重置 D:\django_test2>python manage.py shell Py ...

  5. 1003. Check If Word Is Valid After Substitutions

    We are given that the string "abc" is valid. From any valid string V, we may split V into ...

  6. 转载 javaweb三大框架和MVC设计模式 (自己加拉些内容)

    javaweb三大框架和MVC设计模式 一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基 ...

  7. Oracle中merge into语法

    merge into 语句就是insert和update的一个封装,简单来说就是: 有则更新,无则插入 下面说怎么使用 MERGE INTO table_Name  T1(匿名) using (另外一 ...

  8. 《图解HTTP》阅读笔记--第四章--HTTP状态码

    第四章.返回结果的HTTP状态码前言:状态码的职责是告诉用户服务器端描述返回的请求,以便用户判断服务器处理是否正常. 状态码由三位数字和原因短语组成,其中三位数字的首位指定了响应类别:---1xx 接 ...

  9. peaks

    给定一个无向图,点有点权边有边权 Q次询问,每次询问从点v开始只经过边权<=x的边能到达所有点中点权第k大值,无解输出-1 N<=1e5,M,Q<=5e5 建立大根kruskal重构 ...

  10. luogu1556 幸福的路

    注意到\(n\le10\),所以枚举经过的拐弯牛的所有排列. 注意到STL是一个好东西,所以我这里偷懒直接使用了next_permutation 枚举所有n的排列,对于每一个排列也就是经过拐弯牛的顺序 ...