3 回答
TA贡献1811条经验 获得超6个赞
使用Collections.synchronizedList()。
例如:
Collections.synchronizedList(new ArrayList<YourClassNameHere>())
TA贡献1796条经验 获得超4个赞
更改
private ArrayList finishingOrder;
//Make an ArrayList to hold RaceCar objects to determine winners
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)
至
private List finishingOrder;
//Make an ArrayList to hold RaceCar objects to determine winners
finishingOrder = Collections.synchronizedList(new ArrayList(numberOfRaceCars)
List是ArrayList的超类型,因此您需要指定它。
否则,您正在做的事情看起来还不错。另一个选择是您可以使用Vector,它是同步的,但这可能就是我要做的。
TA贡献1784条经验 获得超9个赞
您可能使用了错误的方法。仅仅因为一个模拟汽车的线程在另一个汽车模拟线程之前完成并不意味着第一个线程应该赢得模拟比赛。
这在很大程度上取决于您的应用程序,但是最好有一个线程以较小的时间间隔计算所有汽车的状态,直到比赛结束。或者,如果您希望使用多个线程,则可以让每辆汽车记录完成比赛所用的“模拟”时间,然后选择获胜者作为最短时间。
添加回答
举报