Перезапуск того же потока после исключения, брошенного в Java - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь выполнить некоторый код в потоке.Я расширил класс Thread и поместил туда некоторый код для выполнения.Я также выбрасываю исключение, чтобы завершить текущий поток и перезапустить его в блоке catch.Это происходит так, но когда запускается новый поток, отображается ненормальный результат.Предположим, мое требование - напечатать счетчик, как 1,2,3,4,5.это хорошо в первый раз.Но когда я запускаю новый экземпляр, результат случайный, что-то вроде 1,1,1,1,1,1,12,4,6,1,1,1,1.Кто-нибудь может мне помочь?Вот мой код ниже:

    public class ThreadTest {
static Publish publish;
    public static void main(String[] args) {        
        publish =  new Publish();
        publish.start();
    }    

    static class Publish extends Thread {
    static int counter = 1;
      public void run(){
        while (true) {
            System.out.println("counter is: " + counter);
            counter++;
            try {
                Thread.sleep(2000);
                if (counter > 5) {
                    throw new InterruptedException("Exception thrown manually to restart thread");
                }
            } catch (Exception ex) {
                publish.interrupt();
                publish.getThreadGroup().interrupt();
                counter = 1;
                publish = new Publish();
                publish.start();
            }
        }

      }
  }

}

Результат как ниже >>

    run:
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 3
counter is: 4
counter is: 1
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 8
counter is: 9
counter is: 11
counter is: 12
counter is: 12
counter is: 14
counter is: 15
counter is: 15
counter is: 17
counter is: 18
counter is: 19
counter is: 20
counter is: 1
counter is: 20
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 20
counter is: 1
counter is: 1
counter is: 20
counter is: 20
counter is: 20
counter is: 20
counter is: 20
counter is: 2
counter is: 20
counter is: 20
counter is: 2
counter is: 20
counter is: 1
counter is: 1
counter is: 2
counter is: 2
counter is: 2
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 2
counter is: 4
counter is: 4
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 2
counter is: 2
counter is: 3
counter is: 4
counter is: 6
counter is: 1
counter is: 1
counter is: 1
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 5
counter is: 3
counter is: 4
counter is: 4
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 6
counter is: 7
counter is: 7
counter is: 2
counter is: 1
counter is: 1
counter is: 3
counter is: 3
counter is: 4
counter is: 6
counter is: 7
counter is: 7
counter is: 6
counter is: 9
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 3
counter is: 1
counter is: 1
counter is: 3
counter is: 2
counter is: 3
counter is: 3
counter is: 4
counter is: 6
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 4
counter is: 2
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 1
counter is: 2
counter is: 1
counter is: 4
counter is: 5
counter is: 5
counter is: 1
counter is: 2
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 6
counter is: 7
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 8
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 5
counter is: 7
counter is: 7
counter is: 1
counter is: 1
counter is: 1
counter is: 4
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 1
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 6
counter is: 8
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 5
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 5
counter is: 7
counter is: 8
counter is: 9
counter is: 10
counter is: 11
counter is: 12
counter is: 13
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 5
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 2
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 2
counter is: 2
counter is: 2
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 5
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 6
counter is: 8
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 8
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 5
counter is: 6
counter is: 7
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 2
counter is: 4
counter is: 1
counter is: 1
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 9
counter is: 9
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 1
counter is: 1
counter is: 2
Exception in thread "Thread-260" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:708)
counter is: 1
counter is: 2
    at threadtest.ThreadTest$Publish.run(ThreadTest.java:49)
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 3
counter is: 5
counter is: 6
counter is: 7
counter is: 1
counter is: 1
counter is: 3
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 3
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 3
Exception in thread "Thread-236" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:708)
counter is: 1
    at threadtest.ThreadTest$Publish.run(ThreadTest.java:49)
counter is: 1
counter is: 2
counter is: 1
counter is: 4
counter is: 5
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 3
counter is: 1
counter is: 1
counter is: 1
Exception in thread "Thread-165" java.lang.IllegalThreadStateException
counter is: 3
    at java.lang.Thread.start(Thread.java:708)
    at threadtest.ThreadTest$Publish.run(ThreadTest.java:49)
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 2
counter is: 3
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 6
counter is: 8
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 5
counter is: 7
counter is: 8
counter is: 9
counter is: 10
counter is: 11
counter is: 12
counter is: 13
counter is: 14
counter is: 15
counter is: 16
counter is: 17
counter is: 18
counter is: 19
counter is: 20
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 1
Exception in thread "Thread-156" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:708)
    at threadtest.ThreadTest$Publish.run(ThreadTest.java:49)
counter is: 1
counter is: 1
counter is: 1
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 9
counter is: 10
counter is: 11
counter is: 12
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 2
counter is: 2
counter is: 3
counter is: 6
counter is: 7
counter is: 8
counter is: 2
counter is: 3
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 2
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 5
counter is: 5
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 1
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 8
counter is: 10
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 4
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 9
counter is: 10
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 7
counter is: 9
counter is: 9
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 2
counter is: 4
counter is: 5
counter is: 5
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 3
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
counter is: 6
counter is: 7
counter is: 8
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 1
counter is: 2
counter is: 1
counter is: 2
counter is: 6

1 Ответ

0 голосов
/ 22 января 2019

Проблема этой программы в том, что потоки просто создаются и никогда не уничтожаются, так как вы сами прервали работающий поток, вот где он запутался. Потоки не останавливаются, и он продолжает работать, как внутри цикла. Я не стал бы комментировать, является ли это правильным способом сделать это. Но я бы предложил поискать другие альтернативы. Я сделал некоторые изменения в вашей программе следующим образом:

public class ThreadTest {
    static Publish publish;

    public static void main(String[] args) {
        System.out.println("Initial active threads : " + Thread.activeCount());
        publish = new Publish();
        publish.start();
    }

    static class Publish extends Thread {
        static int counter = 1;

        public void run() {
            while (true) {
                System.out.println("counter is: " + counter);
                counter++;
                try {
                    Thread.sleep(2000);
                    if (counter > 5) {
                        throw new InterruptedException("Exception thrown manually to restart thread");
                    }
                } catch (Exception ex) {
                    counter = 1;
                    publish = new Publish();
                    publish.start();
                    System.out.println("active threads : " + Thread.activeCount());
                    return;
                }
            }

        }
    }
}

Вот вывод программы:

Initial active threads : 2
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3
counter is: 4
counter is: 5
active threads : 4
counter is: 1
counter is: 2
counter is: 3

Если вы хотите увидеть общее количество созданных и не прерывающихся потоков в вашей программе, попробуйте поместить оператор печати для текущих активных потоков.

Я надеюсь, что это полезно. Ура!

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