package com.javarush.test.level16.lesson13.bonus02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/* Клубок
1. Создай 5 различных своих нитей c отличным от 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()
*/
public class Solution {
    public static List<Thread> threads = new ArrayList<Thread>(5);
    static {
        threads.add(new AlwaysRuner());
        threads.add(new InterruptedExceptionDetecter());
        threads.add(new Lucky());
        threads.add(new Messenger());
        threads.add(new Adder());
    }
    public static class AlwaysRuner extends Thread{
        @Override
        public void run() {
            while (true){}
        }
    }
    public static class InterruptedExceptionDetecter extends Thread{
        @Override
        public void run() {
            try {
                while (!isInterrupted()){
                    sleep(1);
                }
                throw new InterruptedException();
            } catch (InterruptedException e) {
                System.out.println("InterruptedException");
            }
        }
    }
    public static class Lucky extends Thread{
        @Override
        public void run() {
            while (true){
                try {
                    System.out.println("Ура");
                    sleep(500);
                } catch (InterruptedException e) {
                }
            }
        }
    }
    public static class Messenger extends Thread implements Message{
        @Override
        public void run() {
            while(!isInterrupted()) {

            }
        }
        @Override
        public void showWarning() {
            try {
                interrupt();
                join();
            } catch (InterruptedException e) {
            }
        }
    }
    public static class Adder extends Thread{
        @Override
        public void run() {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String s;
            int summa = 0;
            try {
                while (!( (s = reader.readLine() ).equals("N"))){
                    summa += Integer.parseInt(s);
                }
                reader.close();
            } catch (IOException e) {
            }
            System.out.println(summa);
        }
    }
}

 

package com.javarush.test.level16.lesson13.bonus02;

public interface Message {
    void showWarning();
}

МОЁ РЕШЕНИЕ:

package com.javarush.test.level16.lesson13.bonus02;

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

/* Клубок
1. Создай 5 различных своих нитей c отличным от 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()
*/

public class Solution {
    public static List<Thread> threads = new ArrayList<Thread>(5);

    static {
        threads.add(new Everlasting());
        threads.add(new Interrupting());
        threads.add(new Ura());
        threads.add(new MessageInt());
        threads.add(new NumbersSum());
    }

    public static void main(String[] args)
    {
        for (int i = 0; i < threads.size(); i++) {
            threads.get(i).start();
        }
    }

    public static class Everlasting extends Thread {
        public void run() {
            while(true) {

            }

        }

    }

    public static class Interrupting extends Thread {
        public void run() {
            while(!isInterrupted())
            {
                try
                {
                    sleep(1000);
                }
                catch (InterruptedException e)
                {
                    System.out.println("InterruptedException");
                }
            }
        }

    }

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

        }

    }

    public static class MessageInt extends Thread implements Message {
        public void run() {
            while(true) {
                
            }
        }

        @Override
        public void showWarning()
        {
            if (isAlive()) interrupt();
        }
    }

    public static class NumbersSum extends Thread {
        public void run() {
            int a = 0;
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            while(true) {
                try
                {
                    String x = reader.readLine();
                    if (x.equals("N")) {
                        System.out.println(a);
                        break;
                    }
                    a += Integer.parseInt(x);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }

        }

    }
}