使用父母转钱的例子实现,共同资源为银行卡
银行卡类:
/*
@author Nian
@Date 2022/8/9 14:50
@purpose
@Note
*/
public class BankCard {
private String id;
private double balance;
private String message;
public BankCard() {
}
public BankCard(String id, double balance, String message) {
this.id = id;
this.balance = balance;
this.message = message;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
消费者(取钱)类:
/*
@author Nian
@Date 2022/8/9 15:24
@purpose
@Note
*/
public class Consumer implements Runnable {
private BankCard bankCard;
public Consumer() {
}
public Consumer(BankCard bankCard) {
this.bankCard = bankCard;
}
public BankCard getBankCard() {
return bankCard;
}
public void setBankCard(BankCard bankCard) {
this.bankCard = bankCard;
}
@Override
public void run() {
while (true) {
synchronized (bankCard) {
if (bankCard.getBalance() > 0.0) {
System.out.println(bankCard.getMessage());
System.out.println("我取了" + bankCard.getBalance()+"元");
bankCard.setBalance(0);
bankCard.notify();
} else {
try {
bankCard.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
生产者(存钱)类:
/*
@author Nian
@Date 2022/8/9 14:50
@purpose
@Note
*/
public class Producer implements Runnable {
private BankCard bankCard;
public Producer() {
}
public Producer(BankCard bankCard) {
this.bankCard = bankCard;
}
public BankCard getBankCard() {
return bankCard;
}
public void setBankCard(BankCard bankCard) {
this.bankCard = bankCard;
}
@Override
public void run() {
int counter = 0;
while (true) {
synchronized (bankCard) {
if (bankCard.getBalance() >= 0.0) {
if (counter % 2 == 0) {
bankCard.setBalance(1000);
bankCard.setMessage("老爸给你1000元,拿去花");
counter++;
} else {
bankCard.setBalance(500);
bankCard.setMessage("老妈给你500元,拿去花");
counter++;
}
bankCard.notify();
} else {
try {
bankCard.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
测试类:
/*
@author Nian
@Date 2022/8/9 14:44
@purpose use thread
@Note
*/
public class ProducerAndConsumer {
public static void main(String[] args) {
BankCard bankCard = new BankCard("666",0,"");
Consumer consumer = new Consumer(bankCard);
Producer producer = new Producer(bankCard);
Thread thread1 = new Thread(consumer);
Thread thread2 = new Thread(producer);
thread1.start();
thread2.start();
}
}