Java arraylist 多线程_多线程 - 如何使我的ArrayList线程安全? Java中另一种解决问题的方法?...

我有一个ArrayList,我想用它来保存RaceCar对象,一旦完成执行就会扩展Thread类。 一个名为Race的类使用RaceCar对象在完成执行时调用的回调方法处理此ArrayList。 回调方法addFinisher(RaceCar finisher)将RaceCar对象添加到ArrayList。 这应该给出Threads完成执行的顺序。

我知道ArrayList不是同步的,因此不是线程安全的。 我尝试使用Collections.synchronizedCollection(c Collection)方法,传入一个新的ArrayList并将返回的Collection分配给ArrayList。 但是,这给了我一个编译器错误:

Race.java:41: incompatible types

found : java.util.Collection

required: java.util.ArrayList

finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

这是相关代码:

public class Race implements RaceListener {

private Thread[] racers;

private ArrayList finishingOrder;

//Make an ArrayList to hold RaceCar objects to determine winners

finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

//Fill array with RaceCar objects

for(int i=0; i

racers[i] = new RaceCar(laps, inputs[i]);

//Add this as a RaceListener to each RaceCar

((RaceCar) racers[i]).addRaceListener(this);

}

//Implement the one method in the RaceListener interface

public void addFinisher(RaceCar finisher) {

finishingOrder.add(finisher);

}

我需要知道的是,我使用了正确的方法,如果没有,我应该使用什么来使我的代码线程安全? 谢谢您的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值