一个例子:

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. WOJ 10 精英选拔

    神仙dp,膜Claris 题意:给一个长度为$n$的数列,求出不超过k次交换后的最大连续子区间和. 发现交换后的最优答案一定是这样的(0和2的长度可以为0)             0        ...

  2. Socket编程--并发server

    Socket地址复用 int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int ...

  3. iTween插件使用

    itween插件 itween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.用它可以轻松实现各种动画,晃动,旋转,移动.褪色.上色.控制音频等. iTween原理: itween的核心是 ...

  4. Centos7环境下FastRunner前端(FasterWeb)部署

    FastRunner前端安装 1.安装和创建Python虚拟环境 安装virtualenvwrapper 2.拉取代码 cd ~ # 环境当前用户home目录 git clone git@github ...

  5. CHImage

    1.启动图.图标 iOS应用图片尺寸制作脚本 ======= github 规格尺寸(官方) AppIcon应用图标 and Launchimage启动图标的制作 iPhone所有手机型号屏幕尺寸 2 ...

  6. iOS 12中无法获取WiFi的SSID了?

    1.现象描述 2018年苹果升级iOS12之后,没有办法获取wifi名称等信息. 2.获取wifi信息 2.1 获取代码 /************ 控制器的view 加载完毕 的时候调用 ***** ...

  7. MapReduce Kmeans算法含测试数据

    使用时,需要修改K值,args值 运行流程: 先初始化中心点->map中和距离最近的中心点生成一对传入reduce->reduce中把相同key值的存到一起->更新中心点,计算和上一 ...

  8. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  9. DNS 解析域名以便通过服务器来访问的

    域名解析系统 就是把你要访问的网址转换成ip,然后你才能访问的东西 解析www.xxxx.com这类网址为IP来访问服务器 举例: 打个比方 ===>>> 你想去海底捞,但是只知道“ ...

  10. 关于IBOutlet的生命周期

    在调试程序的时候,发现 IBOutlet的对象在执行 getter时,开始一直想找IBOutlet对象getter方法前被执行的代码,但是一直找不到,于是我就想是不是系统自动给IBOutlet 自动初 ...