Есть ли способ, которым я могу "принудительно" выполнить это немедленно или предложить JVM / ThreadPoolExecutor назначить приоритет выполнению этого потока?
Нет. Кроме того, после запуска потока у вас нет возможности контролировать, как он продолжает работать. Вам разрешено устанавливать индивидуальный приоритет потока, но это полезно только тогда, когда JVM решает, запускать ли ваш поток или какой-либо другой поток, возможно, с более низким приоритетом - он не позволяет вам запускать поток в любое время или по своему усмотрению.
Специально для ThreadPoolExecutor
, когда вы вызываете execute()
в экземпляре ThreadPoolExecutor
, Javadoc говорит: "Выполняет заданную задачу когда-нибудь в будущем." Нет упоминания о том, как повлиять или контролировать , когда поток начнется.
Мне нужно сохранить его как отдельный поток, но в то же время мне нужночтобы начать работать срочно.
Возможно, вы могли бы создать пул потоков с одним (или более) потоками, готовыми к работе, и использовать что-то из встроенных классов параллелизма Java (таких как ). Семафор ) как способ начать выполнение.
ОБНОВЛЕНИЕ : Вот пример, показывающий, как вы можете использовать семафор для "запуска" потока.
Semaphore semaphore = new Semaphore(0);
new SomeThread(semaphore).start();
// do other things for a while
// when you're ready for the thread to actually start, call "release()"
semaphore.release();
вот ччитайте сами - он принимает Semaphore
в качестве ввода, затем ждет, пока он не сможет успешно получить его, прежде чем перейти к следующему коду:
class SomeThread extends Thread {
private Semaphore semaphore;
SomeThread(Semaphore semaphore) {
this.semaphore = semaphore;
}
@Override
public void run() {
try {
semaphore.acquire();
// TODO: do the actual thread work here
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}