1700445491
1700445492
public void run(){
1700445493
1700445494
while(true){
1700445495
1700445496
tickets.add(“车票”+new Random().nextInt());
1700445497
1700445498
}
1700445499
1700445500
};
1700445501
1700445502
};
1700445503
1700445504
//售票
1700445505
1700445506
Thread saleThread=new Thread(){
1700445507
1700445508
public void run(){
1700445509
1700445510
for(String ticket:tickets){
1700445511
1700445512
tickets.remove(ticket);
1700445513
1700445514
}
1700445515
1700445516
};
1700445517
1700445518
};
1700445519
1700445520
//启动退票线程
1700445521
1700445522
returnThread.start();
1700445523
1700445524
//启动售票线程
1700445525
1700445526
saleThread.start();
1700445527
1700445528
}
1700445529
1700445530
模拟火车站售票程序,先初始化一堆火车票,然后开始出售,同时也有退票产生,这段程序有没有问题?可能会有读者看出了问题,ArrayList是线程不安全的,两个线程访问同一个ArrayList数组肯定会有问题。
1700445531
1700445532
没错,确定有问题,运行结果如下:
1700445533
1700445534
Exception in thread”Thread-1”java.util.ConcurrentModifcationException
1700445535
1700445536
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
1700445537
1700445538
at java.util.AbstractList$Itr.next(AbstractList.java:343)
1700445539
1700445540
at Client$2.run(Client.java:28)
[
上一页 ]
[ :1.700445491e+09 ]
[
下一页 ]