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 ticketNums = 10 ;
boolean flag = true ;
@Override
public void run ( ) {
while ( flag) {
try {
buy ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
}
private void buy ( ) throws InterruptedException {
if ( ticketNums<= 0 ) {
flag= false ;
return ;
}
Thread . sleep ( 100 ) ;
System . out. println ( Thread . currentThread ( ) . getName ( ) + "拿到了" + ticketNums-- ) ;
}
}
2. 银行取钱不安全
public class UnsafeBank {
public static void main ( String [ ] args) {
Account account = new Account ( 100 , "结婚基金:" ) ;
Drawing wo = new Drawing ( account, 50 , "我" ) ;
Drawing girlfriend = new Drawing ( account, 100 , "girlfriend" ) ;
wo. start ( ) ;
girlfriend. start ( ) ;
}
}
class Account {
int money;
String name;
public Account ( int money, String name) {
this . money = money;
this . name = name;
}
}
class Drawing extends Thread {
Account account;
int drawingMoney;
int nowMoney;
public Drawing ( 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 ( Thread . currentThread ( ) . getName ( ) + "钱不够了,取不了了" ) ;
return ;
}
try {
Thread . sleep ( 1000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
account. money = account. money- drawingMoney;
nowMoney = nowMoney + drawingMoney;
System . out. println ( account. name+ "余额为:" + account. money) ;
System . out. println ( this . getName ( ) + "手里的钱:" + nowMoney) ;
}
}
3.数组不安全
public class UnsafeList {
public static void main ( String [ ] args) {
List < String > list = new ArrayList < > ( ) ;
for ( int i = 0 ; i < 10000 ; i++ ) {
new Thread ( ( ) -> {
list. add ( Thread . currentThread ( ) . getName ( ) ) ;
} ) . start ( ) ;
}
try {
Thread . sleep ( 3000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( list. size ( ) ) ;
}
}