package ThreadDemo;
import java.util.ArrayList;
import java.util.List;
// 线程可能不安全
/*
1.买火车票
2.银行取钱
3.线程不安全的 数组列表
*/
public class Test18_UnsafeList {
public static void main(String[] args) {
List<String> list =new ArrayList<>(); // 存放 String 类型数据的 数组列表
for (int i = 0; i < 10000; i++) {
new Thread(()-> list.add(Thread.currentThread().getName())).start();
}
System.out.println(list.size()); // 结果不是10000,因为可能覆盖率
}
}
package ThreadDemo;
public class Test17_UnsafeBank {
public static void main(String[] args) throws InterruptedException {
Account account = new Account(100, "生活费");
Bank bank = new Bank(account, "我", -20);
new Thread(bank,"我").start();
bank= new Bank(account,"哥哥",-40); // 更新
new Thread(bank,"哥哥").start();
}
}
// 账户
class Account {
int money;
String name; // 账户的名字
public Account(int money, String name) {
this.money = money;
this.name = name;
}
}
// 银行
class Bank implements Runnable{
Account account;
String name; // 操作者(取钱或者存钱的人)
int money;
public Bank(Account account, String name,int money) {
this.account = account;
this.name = name;
this.money= money;
}
@Override
public void run() {
// synchronized (){} 块:锁住某一特定的对象
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
account.money=account.money+money;
if (account.money<=0){
System.out.println("账户里面钱不够");
return;
}
System.out.println(Thread.currentThread().getName()+"往账户里面:"+money);
System.out.println("账户里面还剩:"+account.money);
}
}