Использование ArrayList для хранения класса, который расширяет поток - PullRequest
0 голосов
/ 11 августа 2011

У меня есть класс драйвера с именем 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 }
    }
}

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Если я что-то не пропустил (или вы просто не опубликовали это), вы, кажется, нигде не создали свой ArrayList<Advantech>.Вам нужна эта строка перед использованием:

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

Кроме того, вы можете переименовать список во что-то более наглядное (возможно, advantechThreadList.)

1 голос
/ 11 августа 2011

Примерно так должно работать:

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

Advantech thread;
for(int i = 0; i < 8; i++) {
    thread = new Advantech();
    thread.start();
    threads.add(thread);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...