Во время инициализации нового потока, после run()
полного выполнения метода, как я могу убить этот поток?
public void iniciarHilo(){
new Thread(new Runnable() {
public void run() {
//Codigo
}
}).start();
//Una vez ejecutado el código del método run, necesito eliminar el hilo, o detenerlo
}
именно так
public void iniciarHilo(){
Thread hilo = new Thread(new Runnable() {
public void run() {
//Código
}
});
hilo.start();
//Eliminar este hilo
}
Что происходит, так это то, что каждый раз, когда выполняется конкретное решение, я вызываю метод, который запускает новый поток внутри него, чтобы исключить компоненты кадра с небольшой задержкой между каждым, и это выглядит хорошо, но чем больше я впадаю в это решение, программа зависает.
Я думаю, это потому, что потоки работают, потому что, удалив поток метода и оставив только код процесса, программа работает отлично.
Вы не можете дать команду завершить выполнение потока. Единственное, что вы можете сделать, это убедиться, что выполнение метода
run
(который будет реализованRunnable
или расширен изThread
) каким-то образом завершится. В конце выполнения этого метода поток завершит свое выполнение. Это вместо того, чтобы иметь что-то вродеПо крайней мере, сделайте что-то вроде (это на самом деле слишком просто и не подходит для реальных приложений, но это иллюстрирует способ остановить и убить выполнение потока):
Поскольку вы упомянули об использовании фреймов, я сообщаю вам, что не рекомендуется создавать
Thread
s напрямую и изменять фреймы оттуда, поскольку Swing использует другой поток для администрирования визуальных компонентов. Лучше всего использоватьSwingWorker
, но для большей детализации нам нужно больше узнать о вашем конкретном случае.Забудьте об использовании методов
Thread#stop
иThread#suspend
. Официальная документация четко объясняет, что вы не должны использовать эти методы (проверьте содержание предоставленных ссылок). Есть даже посвященная этому статья: ПочемуThread.stop
,Thread.suspend
иThread.resume
Deprecated? что в переводе означает ПочемуThread.stop
методыThread.suspend
иThread.resume
устарели? .stop()
Этот метод вызывает немедленную остановку потока. Часто это быстрый способ остановить поток, особенно если этот метод выполняется в текущем потоке. В таком случае строка сразу после вызова метода stop() никогда не выполняется, потому что контекст потока умирает до того, как stop() возвращает управление. Более элегантный способ остановить поток — использовать некоторую переменную, которая вызывает упорядоченный выход из метода run(). На самом деле никогда не следует прибегать к использованию этого метода.
suspend()
Метод suspend() отличается от метода stop(). suspend() берет поток и заставляет его прекратить выполнение, не разрушая базовый системный поток или состояние ранее выполнявшегося потока. Если выполнение потока приостановлено, в том же потоке может быть вызвана функция restore(), чтобы запустить его снова.
http://dhw.umh.es/alex-bia/teaching/PC/material/hilos_tutorial-java/cap10-2.htm
вы можете сделать что-то вроде этого:
Если вы хотите запустить или остановить поток, используйте описанные выше методы, не используйте thread.start(); или thread.stop();. Вы также можете использовать логическое значение для переопределения thread.isAlive();
Пояснения: вы начинаете логическое значение как «изменчивое», так что пока оно читается или записывается, его значение не может быть изменено. Это чтобы избежать ошибок. И методы для запуска и остановки потока вы запускаете их как «синхронизированные», чтобы они не могли выполняться одновременно, так как это вызвало бы ошибку.
Я оставлю вам 3, я думаю, очевидно, для чего каждый из них, хотя не рекомендуется останавливать поток и удалять его, он должен закончиться естественным образом.
Ваше здоровье