Метод run () не работает, когда я запускаю поток в Java - PullRequest
0 голосов
/ 18 октября 2019

У меня есть класс, который выходит из потока:

public class Generador extends Thread {

...

public Generador(int marca, float sleep) {

    this.marca = marca;
    this.sleep = sleep;
    this.cantActivaciones = 0;
}

@Override
public void start() {
    marcadorAct++;
    cantActivaciones++;
    if (marcadorAct == 3) {
        desalojarPasajero = true;
        marcadorAct = 0;
    } else {
        desalojarPasajero = false;
    }
}

@Override
public void run() {
    System.out.println("The thread is running.....");
}

Моя проблема в том, что метод run () не работает, когда я использую метод start (). Вот мой код:

public class Simulación {

...
Generador generador[] = new Generador[30]; // Arr of threads...

public Simulación() {   // The constructor
    ....
    for (int i = 0; i < generador.length; i++) {
        generador[i] = new Generador((i + 1) * 1000000, rand.nextInt(3) + rand.nextFloat());
    }
    ....
}

public void generarPasajero() { // The method who decides to start a thread...

    for (int i = 0; i < generador.length; i++) {
            if (!generador[i].isAlive()) {
                generador[i].start();   // HERE START DOESNT RUN THE RUN() METHOD
                break;
            }
        }
}

Надеюсь, вы могли понять мою проблему. Кто-нибудь может мне помочь с этим? Спасибо!

Ответы [ 2 ]

4 голосов
/ 18 октября 2019

Переопределяя метод start(), вы предотвращаете то, что метод сделал бы сам по себе, потому что вы заменили код, который он выполняет. Это означает, что он не запустит поток, запустив метод run().

Эта страница от Geeks for Geeks объясняет это довольно хорошо.

1 голос
/ 18 октября 2019

Лучше всего было бы переместить весь ваш код в функцию run. Функция start из класса Thread переопределена в вашей реализации.

Кроме того, ваш класс будет допустимым Runnable классом. Если задачу нужно запустить без запуска нового потока, можно вызвать функцию run().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...