У меня есть что-то вроде этогоExecutorService.execute() не возвращает тип резьбы
public static void runThread(Thread t){
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
threadExecutor.execute(t);
}
если я Thread.currentThread()
, то я вернусь weblogic.work.ExecuteThread
или иногда java.lang.Thread
(я использовал Weblogic как мой AppServer), но если я
public static void runThread(Thread t){
//ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
//threadExecutor.execute(t);
t.start();
}
тогда, когда я DOD Thread.currentThread()
, я получаю обратно com.my.thread.JSFExecutionThread
, что нить, что я прошел в, и это то, что я хочу. Есть ли способ исправить, так что ExecutorService#execute()
вернет правильный тип темы, например Thread#start()
? Дело в том, что я хочу использовать ExecutorService, потому что я хочу использовать shutdown()
и shutdownNow()
EDIT
Что случилось с этой реализации?
/**
* Run {@code Runnable runnable} with {@code ExecutorService}
* @param runnable {@code Runnable}
* @return
*/
public static ExecutorService runThread(Thread t){
ExecutorService threadExecutor = Executors.newSingleThreadExecutor(
new ExecutionThreadFactory(t));
threadExecutor.execute(t);
return threadExecutor;
}
private static class ExecutionThreadFactory implements ThreadFactory{
private JSFExecutionThread jsfThread;
ExecutionThreadFactory(Thread t){
if(t instanceof JSFExecutionThread){
jsfThread = (JSFExecutionThread)t;
}
}
@Override
public Thread newThread(Runnable r) {
if(jsfThread != null){
return jsfThread;
}else{
return new Thread(r);
}
}
}
Нет, поскольку, если вы используете 'ExecutorService.execute (t)', он выполняется в потоке 'ExecutorService', а не' t'. Обратите внимание, что 'ExecutorService.execute' принимает' Runnable', а не только 'Thread'. – johnchen902
@ johnchen902: Даже с помощью 'ThreadFactory'? –
@ThangPham Я не уверен. Но я изменю свой дизайн, если столкнусь с этим. – johnchen902