【发布时间】:2011-08-10 20:40:56
【问题描述】:
我有一个名为Advantech 的驱动程序类,它存储在ArrayList 中。我实例化并initialize我的班级。 Advantech 类 extends Thread 和 Advantech 类有一个 run() 方法。一旦与设备建立连接,线程就会在类中启动。 (this.start();)
是否可以启动thread 然后将该类的实例存储到ArrayList 中?
当我用set(pos, class) 实例化该类并将其存储回数组列表(覆盖之前的位置)时,当我调用class.isAlive() 时,我得到NullPointerException。
是否有任何替代/更好的方法来做到这一点?
我知道这听起来可能很奇怪,但我使用的是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 }
}
}
【问题讨论】:
-
是什么阻止了你?我的意思是,是的,这是可能的。
-
@Marcelo:愚蠢的问题。我得到 NullPointerException。请再读一遍。这就是为什么我要问如何正确地做到这一点。
-
请贴一些代码;这应该工作。
-
您应该将代码发布到您调用
isAlive的位置。我怀疑你是从另一个线程调用它,在这种情况下你应该使用一些并发列表而不是普通的 ArrayList。
标签: java multithreading arraylist