1700445546
public static void main(String[]args){
1700445547
1700445548
//火车票列表
1700445549
1700445550
final List<String>tickets=new ArrayList<String>();
1700445551
1700445552
//初始化票据池
1700445553
1700445554
for(int i=0;i<100000;i++){
1700445555
1700445556
tickets.add(“火车票”+i);
1700445557
1700445558
}
1700445559
1700445560
//10个窗口售票
1700445561
1700445562
for(int i=0;i<10;i++){
1700445563
1700445564
new Thread(){
1700445565
1700445566
public void run(){
1700445567
1700445568
while(true){
1700445569
1700445570
System.out.println(Thread.currentThread().getId()
1700445571
1700445572
+”—”+tickets.remove(0));
1700445573
1700445574
}
1700445575
1700445576
};
1700445577
1700445578
}.start();
1700445579
1700445580
}
1700445581
1700445582
}
1700445583
1700445584
还是火车站售票程序,有10个窗口在卖火车票,程序打印出窗口号(也就是线程号)和车票编号,很快我们就会看到这样的输出:
1700445585
1700445586
13—火车票96531
1700445587
1700445588
10—火车票96531
1700445589
1700445590
9—火车票96530
1700445591
1700445592
16—火车票96530
1700445593
1700445594
注意看,上面有两个线程在卖同一张火车票,这才是线程不同步的问题,此时把ArrayList修改为Vector即可解决问题,因为Vector的每个方法前都加上了synchronized关键字,同时只会允许一个线程进入该方法,确保了程序的可靠性。
1700445595
[
上一页 ]
[ :1.700445546e+09 ]
[
下一页 ]