Java, не ждите завершения потока - PullRequest
9 голосов
/ 19 мая 2009

Мне нужно найти способ отделить поток от статического вызова и не ждать завершения потока. По сути, подход «огонь и забудь». Может ли кто-нибудь дать мне простой пример того, как этого можно достичь?

Ответы [ 5 ]

27 голосов
/ 19 мая 2009
Thread t = new Thread(new YourClassThatImplementsRunnable());
t.start();

// JDK 8
new Thread(() -> methodYouWantToRun()).start();
9 голосов
/ 19 мая 2009

Если это долгоживущий поток, жизненный цикл которого аналогичен самому вашему приложению, и он будет тратить много времени на ожидание других потоков:

new Thread(new yourLongRunningProcessThatImplementsRunnable()).start();

Если это недолгая задача, связанная с процессором:

ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());

Хотя, в большинстве случаев, как это, вы будете отправлять несколько задач к тому же ExecutorService.

См:

7 голосов
/ 19 мая 2009
public static void foo() {
    new Thread() {
        public void run() {
                     //do something here....
        }
    }.start();
}
5 голосов
/ 19 мая 2009

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

(1) Как уже упоминалось, обычным способом для случайной задачи является просто создать поток и вызвать его метод start () .

(2) Помните, что если ваш фоновый поток не останавливается, то по умолчанию он будет препятствовать завершению работы вашей программы после завершения других потоков. Поэтому вам может потребоваться вызвать setDaemon (true) в потоке , чтобы он не имел такого поведения. (С другой стороны, в приложениях на основе графического интерфейса вы все равно просто вызываете System.exit (), и в идеале вы должны встроить в свою долгосрочную задачу clean способ завершения работы. )

(3) Если у вас часто есть краткосрочные задачи «запустить и забыть», то рассмотрите возможность использования Executors Framework , доступного в Java 5 и далее.

2 голосов
/ 19 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...