我有一个名为Advantech
的驱动程序类,它存储在ArrayList
中。我实例化initialize
我的班级。 Advantech
类extends
Thread
和Advantech
类具有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 }
}
}
答案 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
。)