实现demo,微信银行卡提现,简单的存钱思路,没有太复杂的步骤
package day05;
import java.util.Scanner;
/**
* @author 划水小苏
* @date 2023/03/20 13:24
* @target: 只创建同时存取
**/
public class demo02 {
public static void main(String[] args) {
// Money v1 = new Money();
// Thread v2 = new Thread(v1, "v1");
// v2.start();
// Thread v4 = new Thread(v1, "v2");
// v4.start();
// todo 未达到预期效果,v2占用时,v4应该锁阻塞 锁的范围太小,未解决安全性
//
// 只锁了数值,类似于你可以输入提现多少,密码也输入了,然后锁的内容就是你等微信提现成功那一段
BalanceM v1 = new BalanceM();
// 只创建一个实例,其实可以创建两个实例的,这样代码
Thread v2 = new Thread(v1, "v1");
v2.start();
Thread v3 = new Thread(v1, "v3");
v3.start();
// Balance v5 = new Balance();
// Thread v6 = new Thread(){
// @Override
// public void run() {
// v5.setMoneyNums(2000);
// }
// };
// Thread v7 = new Thread(){
// @Override
// public void run() {
// v5.setMoneyNums(3000);
// }
// };
// v6.start();
// v7.start();
}
}
class Money implements Runnable{
public static int moneyNums = 0;
public int tempMoney;
private Object obj = new Object();
Money(){
}
@Override
public void run() {
synchronized (obj){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要存的金额:");
int money = sc.nextInt();
if (moneyNums >= 0) {
moneyNums+=money;
System.out.println("存入:"+ money +" ,余额:"+ moneyNums);
}
}
}
}
// 资源重构类
class Balance{
private int moneyNums = 0;
public synchronized void setMoneyNums(int M){
if(moneyNums >=0){
this.moneyNums = this.moneyNums + M;
System.out.println("存入:"+ M +" ,余额:"+ this.moneyNums);
}
}
}
// 类静态变量
class BalanceM implements Runnable{
private int moneyNums = 0;
// start后run就开始了,不占用同一个资源的话,他是可以并行的
// 由于加锁资源,只能依照分时调度,先开始的那个先操作
@Override
public void run() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要存的金额:");
int money = sc.nextInt();
setMoneyNums(money);
}
public void setMoneyNums(int moneyNums) {
this.moneyNums += moneyNums;
System.out.println("存入:"+ moneyNums +" ,余额:"+ this.moneyNums);
}
}