三大不安全案例
案例1:
package xianchengBuAnquan;
public class test implements Runnable {
private int ticket = 10;
boolean falg = true;
@Override
public void run() {
while (falg) {
buy();
}
}
private void buy() {
if (ticket <= 0) {
falg = false;
return;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "买票第几张" + ticket--);
}
public static void main(String[] args) {
test test = new test();
new Thread(test, "小红").start();
new Thread(test, "小黑").start();
new Thread(test, "小白").start();
}
}
运行结果
案例2:
package xianchengBuAnquan;
public class unSafeBank {
public static void main(String[] args) {
Account account = new Account(100, "建行");
draw myselfe = new draw(account, 50, "myselfe");
draw girlPrent = new draw(account, 100, "girlPrent");
//new Thread(myselfe).start(); 实现runnAble接口方法
myselfe.start();
girlPrent.start();
}
}
class draw extends Thread {
Account account;
int drawIngMoney;
int nowMoney;
public draw(Account account, int drawIngMoney, String name) {
super(name);
this.account = account;
this.drawIngMoney = drawIngMoney;
}
@Override
public void run() {
if (account.money - drawIngMoney < 0) {
System.out.println(this.getName() + "取钱时" + account.bangName + "账户余额的钱不够,取不了");
return;
}
// 方法问题的不安全性
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 卡内余额
account.money = account.money - drawIngMoney;
// 手里的钱+银行取得钱
nowMoney = nowMoney + drawIngMoney;
System.out.println(this.getName() + "手里的钱: " + nowMoney);
System.out.println(account.bangName + "账户余额: " + account.money);
}
}
//银行账户信息
class Account {
int money;
String bangName;
public Account(int money, String bangName) {
this.money = money;
this.bangName = bangName;
}
}
运行结果:
案例3:
懒得沾代码了