Поток Java не выполняется

1

Я пытаюсь создать поток в Java, и похоже, что он будет работать (поток запускается, и если я попытаюсь написать некоторые случайные мысли в код, программа вернет ошибки в thread-0. Но по какой-то причине, код в потоке просто не выполняется. Когда я вставлял простой файл system.out.printl в начале, он не показывался. Я не нашел ничего, когда искал эту проблему, поэтому надеюсь, что вы сможете мне помочь.

Главный:

  public class Main {
        public static void main(String[] args) throws java.io.IOException{

            SendMessages sm = new SendMessages();
            sm.start();

            System.out.println("2");

            while(true){
            }
        }
 }

Нить:

public class SendMessages extends Thread {
    public void run(String[] args) throws java.io.IOException {

        System.out.println("1");
    }   
}

"2" - это печать, но не "1".

Приветствую

  • 1
    run не генерирует исключения и не принимает параметры.
  • 2
    Вы обычно не хотите расширять Thread . Вместо этого реализуйте Runnable и передайте его конструктору Thread.
Показать ещё 1 комментарий
Теги:
multithreading

2 ответа

3
Лучший ответ

run не генерирует исключений и не принимает параметры.

Вы должны переопределить хороший:

public void run() {
}

Вы можете добавить аннотацию @Override чтобы убедиться, что вы переопределяете ее:

@Override
public void run() {
}
  • 2
    Да, 1+. Либо это, либо используйте Callable. Также всегда используйте аннотацию @Override при попытке переопределить метод.
  • 0
    Благодарю. Мне нужны были исключения для чего-то, что я вынул для этого, потому что я не хотел делать здесь такой большой код. Но сейчас я перенесу это в другой класс.
Показать ещё 2 комментария
1

Вы не правильно выполняете метод run(). Правильной сигнатурой метода для запуска является: public void run(), без параметров. Если вы измените класс SendMessages на

public class SendMessages extends Thread {
    @Override
    public void run() {
        System.out.println("1");
    }   
}

Вы должны увидеть 1 напечатанную. Вот почему примечание @Override полезно - оно говорит вам, когда написанный вами метод не является чем-то главным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню