Условие задачи: Клубок 1. Создай 5 различных своих нитей (наследников класса Thread): 1.1. Нить 1 должна бесконечно выполняться; 1.2. Нить 2 должна выводить "InterruptedException" при возникновении исключения InterruptedException; 1.3. Нить 3 должна каждые полсекунды выводить "Ура"; 1.4. Нить 4 должна реализовать интерфейс Message, при вызове метода showWarning нить должна останавливаться; 1.5. Нить 5 должна читать с консоли числа пока не введено слово "N", а потом вывести в консоль сумму введенных чисел. 2. В статическом блоке добавь свои нити в List<Thread> threads в перечисленном порядке. 3. Нити не должны стартовать автоматически. Подсказка: Нить 4 можно проверить методом isAlive() Requirements: 1. Статический блок класса Solution должен создавать и добавлять 5 нитей в список threads. 2. Нити из списка threads не должны стартовать автоматически. 3. Нить 1 из списка threads должна бесконечно выполняться. 4. Нить 2 из списка threads должна выводить "InterruptedException" при возникновении исключения InterruptedException. 5. Нить 3 из списка threads должна каждые полсекунды выводить "Ура". 6. Нить 4 из списка threads должна реализовать интерфейс Message, при вызове метода showWarning нить должна останавливаться. 7. Нить 5 из списка threads должна читать с консоли числа пока не введено слово "N", а потом вывести в консоль сумму введенных чисел. Моё решение:
package com.javarush.task.task16.task1632;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
Клубок
*/

public class Solution {
    public static List<Thread> threads = new ArrayList<>(5);
        static {
            threads.add(new MyThread(1));
            threads.add(new MyThread(2));
            threads.add(new MyThread(3));
            threads.add(new MyThread(4));
            threads.add(new MyThread(5));
        }
    public static void main(String[] args) {
/*        for (int i = 0; i < threads.size(); i++) {
            threads.get(i).start();
        }*/
    }

    public static class MyThread extends Thread implements Message {
        @Override
        public void showWarning() {
            if(this.isAlive()) {
                this.interrupt();
            }
        }

        int number;
        public MyThread(int number) {
            this.number = number;
        }
        @Override
        public void run() {
            switch (this.number) {
                case 1:
                    methodForFirstThread();
                    break;
                case 2:
                    methodForSecondThread();
                    break;
                case 3:
                    methodForThirdThread();
                    break;
                case 4:
                    methodForFourthThread();
                    break;
                case 5:
                    methodForFifthThread();
                    break;
            }
        }

        public void methodForFirstThread() {
            int a = 0;
            while (true) {
                a++;
            }
        }

        public void methodForSecondThread() {
            try {
                while (true) {
                    sleep(500);
                }
            } catch (InterruptedException e) {
                System.out.println("InterruptedException");
            }
        }

        public void methodForThirdThread() {
            while (true) {
                System.out.println("Ура");
                try {
                    sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        public void methodForFourthThread() {
            while(true) {
                if(this.isInterrupted()) {
                    return;
                }
            }
        }

        public void methodForFifthThread() {
            int a = 0;
            Scanner scanner = new Scanner(System.in);
            while (scanner.hasNextInt()) {
                a += scanner.nextInt();
            }
            while (scanner.hasNextLine()) {
                if (scanner.nextLine().equals("N")) {
                    System.out.println(a);
                }
            }
        }

    }
}
Вопрос: насколько корректно использовать такой подход (создавать в классе-наследнике Thread разные методы, и вызывать один из них, в зависимости от аргумента в конструкторе нити? Спрашиваю, потому что у меня один раз уже прошло некорректное решение как правильное. Сама не до конца уверена, что в моем решении нет подвоха