如何让我的ArrayList的线程安全?另一种方法来解决在Java中? [英] How do I make my ArrayList Thread-Safe? Another approach to problem in Java?

查看:307
本文介绍了如何让我的ArrayList的线程安全?另一种方法来解决在Java中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我想用持有,一旦扩展Thread类,因为它们执行完毕赛车对象的ArrayList。一类,称为种族,处理使用时完成执行的赛车对象调用的回调方法此ArrayList。回调方法,addFinisher(赛车装订器),增加了赛车的对象到ArrayList。这应该给这些线程执行完的顺序。

I have an ArrayList that I want to use to hold RaceCar objects that extend the Thread class as soon as they are finished executing. A class, called Race, handles this ArrayList using a callback method that the RaceCar object calls when it is finished executing. The callback method, addFinisher(RaceCar finisher), adds the RaceCar object to the ArrayList. This is supposed to give the order in which the Threads finish executing.

我知道ArrayList是不同步的,因此不是线程安全的。我试图通过传递一个新的ArrayList和指派返回集合到一个ArrayList使用Collections.synchronizedCollection(C系列)方法。然而,这给了我一个编译器错误:

I know that ArrayList isn't synchronized and thus isn't thread-safe. I tried using the Collections.synchronizedCollection(c Collection) method by passing in a new ArrayList and assigning the returned Collection to an ArrayList. However, this gives me a compiler error:

Race.java:41: incompatible types
found   : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

下面是相关code:

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<numberOfRaceCars; 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);
    }

我需要的是,我使用一个正确的做法,如果不知道的,我应该怎么使用,使我的code线程安全的?感谢您的帮助!

What I need to know is, am I using a correct approach and if not, what should I use to make my code thread-safe? Thanks for the help!

推荐答案

使用<一个href=\"http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#synchronizedList(java.util.List)\"><$c$c>Collections.synchronizedList().

例如:

Collections.synchronizedList(new ArrayList<YourClassNameHere>())

这篇关于如何让我的ArrayList的线程安全?另一种方法来解决在Java中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆