Здравствуйте. Не понимал как реализуется все это. Придумал сам аналогичную задачу. Теоретически все понятно, но. В main при запуске потока, главный отправляем в сон. Работает другой поток. После чего, время (3200) заканчивается и работает команда interrupt. И конец. Логично. Запутался я в этих interrupt и !isInterrupted(). Вроде как он не завершает поток, а проверяет его состояние. Вроде не завершает, а просит завершится. Или все работает очень просто? Пишем while(!isInterrupted()) для придания циклу значения, отличного от interrupt. То есть, так же как работая через свою boolean переменную, где мы присваивали ей какое-то значение, но тут просто вызываем метод с каким-то значением? И последнее: почему вообще надо вызывать тогда в catch (InterruptedException e) { Thread.currentThread().interrupt(); } Так все работает и удобно. Но в задачах со своей переменной мы не писали так. А просто создавили метод с boolean переменной isWork, дальше в потоке цикл(isWork) , и в мэйн вызывали интерапт? Или закончится время(3200 например) и будет генерироваться это исключение, где мы пишем, что надо делать? Но если нам, например не надо что-то выжидать и try/catch незачем писать, как тогда программа завершится после отведенного методом MAIN времени?
public class ExampleInterrupt {
    public static void main(String[] args) throws InterruptedException {
        Excp excp = new Excp();
        excp.start();
        Thread.sleep(3200);
        excp.interrupt();
    }}

class Excp extends Thread {
    @Override
    public void run() {
        while (!isInterrupted()) {
            System.out.println("Thread is working");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }        }    }}