女孩取钱
public class Girl extends Thread {
private Card card;
public Girl(Card card,String name) {
this.card = card;setName(name);
}
@Override
public void run() {
while (true) {
int money=(int) (Math.random()*1000+1);
card.wit(money);
try {
sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
男孩存钱
public class Boy extends Thread {
private Card card;
public Boy(Card card,String name) {
this.card = card;setName(name);
}
@Override
public void run() {
while (true) {
int money=(int) (Math.random()*1000+1);
card.put(money);
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
代码区
public class Card {
private int balance;
public Card(int money) {
this.balance = money;
}
// 存钱
public synchronized void put(double money) {
this.balance += money;
String name = Thread.currentThread().getName();
System.out.println(name + "存了:" + money + "卡的余额" + balance);
//唤醒和当前持有相同锁的线程对象
this.notifyAll();
}
// 取钱
public synchronized void wit(double money) {
while(balance < money) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.balance -= money;
String name = Thread.currentThread().getName();
System.out.println(name + "取了:" + money + "卡的余额" + balance);
}
}
“`
测试
public class CardTest {
public static void main(String[] args) {
Card card =new Card(100);
Thread b=new Boy(card,”tom”);
Thread g=new Girl(card,”lili”);
Thread g1=new Girl(card,”fafa”);
Thread g2=new Girl(card,”susu”);
b.start();
g.start();
g1.start();
g2.start();
}
}