我创建了一个执行者:
public class GUIExecutorService extends AbstractExecutorService {
@Override
public void shutdown() {
}
@Override
public List<Runnable> shutdownNow() {
return new ArrayList<>();
}
@Override
public boolean isShutdown() {
return false;
}
@Override
public boolean isTerminated() {
return false;
}
@Override
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
return true;
}
@Override
public void execute(Runnable command) {
Platform.runLater(command);
}
}
和配置器:
public class JavaFXEventThreadExecutorServiceConfigurator extends ExecutorServiceConfigurator {
public JavaFXEventThreadExecutorServiceConfigurator(Config config, DispatcherPrerequisites prerequisites) {
super(config, prerequisites);
}
@Override
public ExecutorServiceFactory createExecutorServiceFactory(String id, ThreadFactory threadFactory) {
return () -> new GUIExecutorService();
}
}
我确实使用过它:
this.navigatorActor = getContext().actorOf(new Props(() -> new NavigatorActor(stage)).withDispatcher("javafx-dispatcher"), "navigator" );
但是一旦我想停止在应用程序中使用:
actorSystem.shutdown();
我的程序仍然执行。
使用上次关机我希望它能关闭所有演员系统。
演员没有终止。
我的代码出了什么问题?
答案 0 :(得分:0)
您应该执行堆栈跟踪(jstack PID
)或使用分析器来查看哪个线程池仍处于活动状态并且正在踢。
答案 1 :(得分:0)
您需要将return bool从true更改为false。
@Override
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
return false;
}