使用ArrayList存储扩展线程的类

时间:2011-08-10 20:40:57

标签: java multithreading arraylist

我有一个名为Advantech的驱动程序类,它存储在ArrayList中。我实例化initialize我的班级。 Advantechextends ThreadAdvantech类具有run()方法。一旦连接到设备,该线程就在类中启动。 (this.start();

是否可以启动thread然后将该类的实例存储到ArrayList

当我实例化该类并使用set(pos, class)将其存储回数组列表(覆盖之前的位置)时,当我调用NullPointerException时,我得到class.isAlive()

有没有替代方案/更好的方法来做到这一点?

我知道这可能听起来很奇怪,但我使用ArrayList,否则我必须创建八个类来启动八个线程,例如:< / p>

Advantech adv1;
Advantech adv2;
Advantech adv3;
Advantech adv4;

每个实例的所有参数都相同。

代码:

private ArrayList<Advantech> advantech = null;
private Advantech adv = null;
....

adv = new Advantech(/* parameters */);

adv.initialize();

advantech.set(0, adv);

在Advantech.java中:

public class Advantech extends Thread {

    ....
    public void run() {

         while(!done) { // do some work }
    }
}

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

List<Advantech> threads = new ArrayList<Advantech>(8);

Advantech thread;
for(int i = 0; i < 8; i++) {
    thread = new Advantech();
    thread.start();
    threads.add(thread);
}

答案 1 :(得分:1)

除非我遗漏了某些内容(或者您还没有发布),否则您似乎无法在任何地方构建ArrayList<Advantech>。在使用之前你需要这一行:

// Here, numOfThreads is an int variable that specifies how many threads you want to store
advantech = new ArrayList<Advantech>(numOfThreads);

此外,您可能希望将列表重命名为更具描述性的内容(可能是advantechThreadList。)