Новая тема несколько раз

Я хочу запустить поток, когда я нажимаю кнопку

public void ButtonClick(){ Thread thread = new Thread(){ public void run(){ Log.i("Test", "I'm in thread"); } }; thread.start(); } 

Мой вопрос: я хочу нажать несколько раз на этой кнопке. После печати сообщения «Я в потоке» напечатано несколько потоков, все еще существующих? Или каждый раз, когда функция запуска завершена, поток уничтожается?

В случае, если я создаю несколько потоков, которые работают одновременно, как я могу закрыть их чистым способом?

Спасибо за вашу помощь!

После печати сообщения «Я в потоке» напечатано несколько потоков, все еще существующих?

Нет. Каждый из них будет уничтожен автоматически.

В случае, если я создаю несколько потоков, которые работают одновременно, как я могу закрыть их чистым способом?

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

Чтобы справиться с параллелизмом и безопасностью, вы должны посмотреть на java.util.concurrent который представляет собой служебную среду для обработки параллелизма в Java.

После печати сообщения «Я в потоке» напечатано несколько потоков, все еще существующих? Или каждый раз, когда функция запуска завершена, поток уничтожается?

В вашем случае вы создаете много потоков, поскольку для каждого нажатия кнопки создается поток.

Продолжительность жизни Thread завершена после завершения последнего оператора в методе run() . После выполнения метода run() поток будет входить в состояние TERMINATED и не может быть повторно запущен.

Лучшее решение не создает новый поток для каждого нажатия кнопки. Если вам нужно больше потоков в вашем приложении, зайдите в пул потоков.

Для этой цели Java предоставляет инфраструктуру Executor . Он лучше управляет жизненным циклом резьбы.

Используйте один из API, который вернет ExecutorService от Исполнителей

Например newFixedThreadPool(4)

Взгляните на этот пост и эту статью для получения дополнительных возможностей.

В случае, если я создаю несколько потоков, которые работают одновременно, как я могу закрыть их чистым способом?

Вы можете закрыть ExecutorService как указано ниже в сообщении SE:

Как принудительно закрыть java ExecutorService

Поскольку вы используете Android, у вас есть еще одна хорошая альтернатива многопоточности: HandlerThread и Handler

Создание потока каждый раз – плохая идея, использующая пул потоков.

Создайте класс, реализующий Runnable вместо анонимного потока … pass runnable object, создающий столько потоков, сколько вам нравится. Поскольку создание объекта Анонимный Runnable создает только один объект, что ограничивает вас для достижения ваших требований. Проверьте статус потока перед созданием другого или создайте группу потоков (амортизированный) или пул потоков, используя параллелизм, который вы используете вызываемым вместо runnable, и передайте его пулу потоков определенного размера, или вы можете преобразовать runnable в вызываемый, а затем передать его в пул Столько раз, сколько вам нравится

 class Thop implements Runnable { public void run() { // operation } }