java - 什么会导致 Java ScheduleService 无法运行?

标签 java multithreading service

在我的 Java 应用程序中,我定义了一个 ScheduleService,如下所示:

ScheduledService<Void> scheduledService = new ScheduledService<Void>() {
    @Override
    protected Task<Void> createTask() {
        return new Task<Void>() {
            @Override
            protected Void call() {
               tick();
               return null;
            }
        };
    }
 };
scheduledService.setPeriod(new javafx.util.Duration(TICK_PERIOD.toMillis()));
scheduledService.start();

当我从 IntelliJ 触发应用程序时,它工作正常并且 tick() 每秒运行一次。当使用 JavaFX Packager 将应用程序打包为 .exe 时,该服务永远不会启动。

在所有情况下,我运行 .start() 后服务器的状态都是 SCHEDULED。任何想法可能还会发生什么?是否有什么东西阻止了线程的创建?或者它可能不是在各种线程之间切换?

ScheduledService 的文档说(强调我的):

Timing for this class is not absolutely reliable. A very busy event thread might introduce some timing lag into the beginning of the execution of the background Task, so very small values for the period or delay are likely to be inaccurate. A delay or period in the hundreds of milliseconds or larger should be fairly reliable.

事件线程是否有问题?有没有办法检查它?

调用 start() 后,scheduleService.getExecutor() 返回 null。这是预期的吗?

我试过设置我自己的执行器是这样定义的:

BlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<>();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(32, Integer.MAX_VALUE, 1000, TimeUnit.MILLISECONDS, blockingQueue);
scheduledService.setExecutor(threadPoolExecutor);

然后我在调用 start 之前和之后将其打印出来。在它看起来像这样之前:

java.util.concurrent.ThreadPoolExecutor@4d97d155[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]

之后:

java.util.concurrent.ThreadPoolExecutor@4d97d155[Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]

因此,它声称有一个 Activity 线程,即使它似乎根本没有 Activity 。

更新:我删除了对屏幕保护程序的提及,因为我设法将问题重现为简单的 .exe 但我仍然遇到问题,问题没有从 IntelliJ 运行它时会发生,它只会在打包为 .exe 时发生。

最佳答案

我找到了解决方案,它与 ScheduleService 无关。我的应用程序中实际上还有其他三个错误,它们正在复合以产生意外行为并隐藏我探索问题的尝试。

关于java - 什么会导致 Java ScheduleService 无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476329/

相关文章:

android - 更新服务中的 MusicPlayer SeekBar

java - Intellij 重新格式化程序删除空行的缩进

java - CheckFilter 中出现 NullPointerException?

java - 基于Java的B2B客户端/服务器服务中的Okhttp(高并发)

java - 关于线程和可运行对象

android - 如何在 Android 中的 UI 线程之后等待?

android - 在后台服务中创建地理围栏

Java : accessor method? 变异方法?

java - 如何在 switch 语句中执行 actionPerformed?

java - 在Android上运行闹钟后台服务?