Как завершить все предыдущие потоки, если запущен поток того же типа [JavaFX] - PullRequest
0 голосов
/ 19 апреля 2020

поэтому предположим, что у меня есть функция, которая запускает Thread1 с именем fucntionA. Теперь потоку 1 требуется 10 секунд для запуска и завершения sh

Но предположим, что я снова вызываю функцию A, в течение 5 секунд после ее первого вызова , так что первый экземпляр Thread1 все еще работает

Я хочу, чтобы первый экземпляр Thread1 завершился после вызова нового экземпляра.

Как мне этого добиться?

1 Ответ

1 голос
/ 19 апреля 2020

Ниже код запускает поток. Затем, после короткой паузы (чтобы смоделировать первый поток, требующий времени для завершения), запускается второй поток, но перед запуском второго потока первый поток прерывается.

public class Cesation implements Runnable {
    private volatile boolean quit;

    public synchronized void cease() {
        quit = true;
    }

    @Override
    public void run() {
        long total = Long.MIN_VALUE;
        while (!quit) {
            if (total == Long.MAX_VALUE) {
                total = Long.MIN_VALUE;
            }
            total++;
        }
        System.out.println("Final total = " + total);
    }

    public static void main(String[] args) {
        Cesation c1 = new Cesation();
        Thread t1 = new Thread(c1);
        t1.start();
        try {
            Thread.sleep(2000);
        }
        catch (InterruptedException x) {
            x.printStackTrace();
        }
        Cesation c2 = new Cesation();
        Thread t2 = new Thread(c2);
        c1.cease();
        try {
            t1.join();
        }
        catch (InterruptedException x1) {
            x1.printStackTrace();
        }
        t2.start();
        try {
            Thread.sleep(2000);
        }
        catch (InterruptedException x) {
            x.printStackTrace();
        }
        c2.cease();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...