Java как остановить поток перед повторным запуском другого экземпляра

Имеется код, который при нажатии на кнопку парсит число на составляющие и озвучивает, работает примерно так:

public class Sound extends Thread{
    public void run(){
        //some code
    }
}

public class Main {
    public static void main(String[] args){
        Sound sound1=new Sound();
        sound1.start();
        sound1.join();

        Sound sound2=new Sound();
        sound2.start();
        sound2.join();
        }
}

Проблема в том, что при использовании .join() фризится все приложение пока не закончится озвучка всех цифр, а если не применять этот метод, то при нажатии на кнопку несколько раз подряд воспроизведение начинается каждый раз, не дожидаясь завершения предыдущего и звук накладывается. Как остановить воспроизведение, прежде чем начать новое, не применяя .join()?


Ответы (1 шт):

Автор решения: IlnurGibadullin
public class Sound extends Thread {
    public void run() {
        if (Thread.currentThread().isInterrupted()) {
            System.out.println("This thread was interrupted!")
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Sound sound1 = new Sound();
        sound1.start();
        sound1.interrupt();
    }
}
→ Ссылка