javafx akka调度员泄漏

时间:2014-07-14 11:57:02

标签: javafx akka actor

我创建了一个执行者:

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();

我的程序仍然执行。

使用上次关机我希望它能关闭所有演员系统。

演员没有终止。

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

您应该执行堆栈跟踪(jstack PID)或使用分析器来查看哪个线程池仍处于活动状态并且正在踢。

答案 1 :(得分:0)

您需要将return bool从true更改为false。

@Override
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
    return false;
}