package com.qf.demo;
/**
* 有一张银行卡 那朋友存钱 女朋友取钱 多线程 并且实现同步操作
*
* 资源共享
有两种操作
*/
public class Thread4 {
public static void main(String[] args) {
Card card = new Card();
BoyFriend boyFriend = new BoyFriend(card);
GirlFriend girlFriend = new GirlFriend(card);
//
Thread t = new Thread(boyFriend, "男朋友");
Thread t2 = new Thread(girlFriend, "女朋友");
t.start();
t2.start();
}
}
/**
* 共享资源类
*/
class Card {
private int money;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
/**
* 存钱类
*/
class BoyFriend implements Runnable{
// 将资源共享类作为操作类的属性
Card card;
public Card getCard() {
return card;
}
public BoyFriend(Card card) {
super();
this.card = card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized(card){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
card.setMoney(card.getMoney()+1000);
System.out.println(Thread.currentThread().getName()+"存了1000,还剩"+card.getMoney());
}
}
}
}
class GirlFriend implements Runnable{
Card card;
public Card getCard() {
return card;
}
public GirlFriend(Card card) {
super();
this.card = card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized(card){
if(card.getMoney()>=1000){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
card.setMoney(card.getMoney()-1000);
System.out.println(Thread.currentThread().getName()+"取了1000.,还剩"+card.getMoney());
}else {
System.out.println("余额不足");
}
}
}
}
}
java线程 存取钱问题
最新推荐文章于 2023-05-26 10:00:00 发布