二十一、三大不安全案例
作者:互联网
1. 不安全买票
public class UnSafeBuyTicket {
public static void main(String[] args) {
BuyTicket buyTicket = new BuyTicket();
new Thread(buyTicket,"张三").start();
new Thread(buyTicket,"李四").start();
new Thread(buyTicket,"王五").start();
}
}
class BuyTicket implements Runnable{
private int ticket=3;
@Override
public void run() {
while (true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"买到的票号为:"+ticket--);
}else{
break;
}
}
}
}
结果:
2. 不安全取钱
public class UnSafeBank {
public static void main(String[] args) {
Withdraw withdraw = new Withdraw(80);
Thread t1=new Thread(withdraw,"他");
Thread t2=new Thread(withdraw,"她");
t1.start();
t2.start();
}
}
class Withdraw implements Runnable{
//余额
private int balance=100;
//取出
private int take;
public Withdraw(int take) {
this.take = take;
}
@Override
public void run() {
if (balance-take>0){
try {
if (Thread.currentThread().getName().equals("他")){
Thread.sleep(1000);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
balance=balance-take;
System.out.println(Thread.currentThread().getName()+"取出:"+take+",剩余:"+balance);
}else{
System.out.println("余额不足");
}
}
}
结果:
3. 不安全列表(如:ArryList)
public class UnSafeList{
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 2000; i++) {
new Thread(()->{
list.add(Thread.currentThread().getName());
}).start();
}
System.out.println(list.size());
}
}
结果:说明ArrayList并不是线程安全的,如果安全,则list.size()应该等与2000。
标签:Thread,start,int,二十一,案例,take,new,public,三大 来源: https://www.cnblogs.com/epiphany8/p/16272113.html