一个例子:

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. PartyLocation的Post请求问题---debug

    这里,遇到了一个debug: @Override public void setPrimaryPartyLocation(PartyLocation partyLocation) { if (!get ...

  2. Jsp入门第二天

    1. JSP 指令: JSP指令(directive)是为JSP引擎而设计的. 它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分. 2. 在目前的JSP 2.0中,定义了p ...

  3. Cyber-Ark spring mvc @autowired

    我们帮助中国平安改进他们重要系统的特权帐号密码管理,提供给他们一个“统一的,集中的,安全的”特权帐号密码管理解决方案.完全满足平安信息安全部对“特权帐号生命周期管理”的理解和需求,而且关键组件的高可用 ...

  4. 完全离线安装VSCode插件--Eslint

    最近折腾了一番,总算把Eslint插件在离线的情况下安装好了.之前查了挺多,但是很多方法还是在没有完全离线的情况下进行的.之所以想完全离线安装,主要是因为我们工作的地方是禁止访问外网的,所以像直接执行 ...

  5. 利用excel制作二维码

    1 将想要通过扫描二维码访问的目标网址放入A1单位格 2 在excel 编辑区右击选择“自定义功能区” 3 然后将“开发者工具”选上 4 点击菜单栏的“开发者工具---插入--->其他控件” 5 ...

  6. K-Dominant Character (模拟)

    You are given a string s consisting of lowercase Latin letters. Character c is called k-dominant iff ...

  7. P1891 疯狂LCM

    \(\color{#0066ff}{ 题目描述 }\) 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N ...

  8. luogu1556 幸福的路

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

  9. [转载]C#实现获取浏览器信息

      原文地址:C#实现获取浏览器信息作者:flywithme Request.Browser.MajorVersion.ToString();//获取客户端浏览器的(主)版本号 Request.Bro ...

  10. 洛谷 P1801 黑匣子_NOI导刊2010提高(06)

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...