1) почему в 5 нити: если if (buff.equals("N")) вы дает ошибка NumberFormatException разве там не то же значение проверяется , что и если код(запись в переменную) if (number.equals("N")) ? 2) вообще после первого вывода суммы, консоль остается доступной для ввода, (то есть 1 2 N 3 и все еще можно вводить) задание звучит так "Нить 5 должна читать с консоли числа пока не введено слово "N", а потом вывести в консоль сумму введенных чисел." когда второй раз ввожу после N уже ничего не подсчитывается, точно ли должна была консоль остаться доступной для ввода? по заданию не могу понять вроде ничего сказано, но и break; должен был сработать соответственно ничего и не подсчитывается, но консоль все еще открыта. buff.close(); где-то надо сделать? 3) как вводить в консоль, есть там Ура вылезают?) мне приходилось раскомментировать нить с Ура...
public class Solution {
    public static List<Thread> threads = new ArrayList<>(5);

    public static class Thread1 extends Thread {
        @Override
        public void run() {
            while (true) {
                try {
                    threads.get(0).join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static class Thread2 extends Thread {
        @Override
        public void run() {
            try {
                Thread.sleep(0);
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println("InterruptedException");
            }
        }
    }

    public static class Thread3 extends Thread {
        @Override
        public void run() {
            while (true) {
                try {
                    System.out.println("Ура");
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static class Thread4 extends Thread implements Message {
        boolean exit=false;
        @Override
        public void run() {

            while (!exit) {

            }
        }
        @Override
        public void showWarning() {
            exit=true;
        }
    }

    public static class Thread5 extends Thread {
        @Override
        public void run() {
            BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
            try {
                int count = 0;
                while (!Thread.currentThread().isInterrupted()) {
                    String number = buff.readLine();
                    if (number.equals("N")) {
                        System.out.println(count);
                        currentThread().interrupt();
                        break;
                    }
                    count += Integer.parseInt(number);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    static {
        threads.add(new Thread1());
        threads.add(new Thread2());
        threads.add(new Thread3());
        threads.add(new Thread4());
        threads.add(new Thread5());
    }

    public static void main(String[] args) {
        threads.get(0).start();
        threads.get(1).start();
        threads.get(2).start();
        threads.get(3).start();
        threads.get(4).start();
    }
}