我有一个称为Advantech的驱动程序类,该驱动程序类存储在ArrayList中。我实例化并initialize我的课程。 Advantechextends ThreadAdvantech类具有run()方法。建立与设备的连接后,线程便在类中启动。 (this.start();

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

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

是否有其他选择/更好的方法来做到这一点?

我知道这听起来很奇怪,但是我正在使用ArrayList,因为否则我必须创建八个类来启动八个线程,例如:

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 }
    }
}

最佳答案

除非我错过了一些内容(或者您只是没有发布过内容),否则您似乎并没有在任何地方构建ArrayList<Advantech>。您需要在使用此行之前:

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


另外,您可能希望将列表重命名为更具描述性的名称(也许advantechThreadList。)

09-08 05:50