public static void main(String[] args) {
        for (Thread th : threads){
            th.start();

        }
        ((Task4)threads.get(3)).showWarning();

    }

    public static class Task4 extends Thread implements Message {
        @Override
        public void run() {
            while (!isInterrupted()) {
            }

        }

        @Override
        public void showWarning() {
            this.interrupt();
        }
    }
данный код рабочий. До него вместо iterrupted() и iterrupt() было isAlive(), не принималось, почему? - это первое. второе : ((Task4)threads.get(3)).showWarning(); ну ни как мне не дается к пониманию это выражение, я его содрал. По другому метод showWarning() не вызывается, если его сделать статическим то ругается на оператор this. ((Task4)threads.get(3)).showWarning() - тут получается объект сужается до типа (Task4) что бы использовать его методы? Почему нельзя вызвать Task4.showWarning(), или создав объект Task4 task4 = new Task4(); task4.showWarning() ? На этом застрял на долго, списал но так и не понял почему не получается моими методами.