我有一个称为Advantech
的驱动程序类,该驱动程序类存储在ArrayList
中。我实例化并initialize
我的课程。 Advantech
类extends
Thread
和Advantech
类具有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
。)