Проблема
У вас есть два открытых потока, возможно, три, если у вас есть один отведенный для пользовательского интерфейса.
Первый поток - тот, на котором запускается программа, а второй -быть там, где вы создаете случайный объект и цикл for.Когда вы вызываете «остановить поток», вы делаете это либо из основного потока, либо из третьего потока для пользовательского интерфейса.
Это означает, что
Thread.currentThread().interrupt();
не закрывает правильный поток.
Решение
Для решения этой проблемы посмотрите на это GeeksForGeeks статья, в которой предлагается сохранить потоки в виде переменной, а затем вы можете надежно вызвать метод прерывания для нее.