当前位置: 首页 > 知识库问答 >
问题:

使用执行程序创建调度线程池计算器

曾云
2023-03-14

我对为什么以下演员不起作用感到非常困惑:

ScheduledThreadPoolExecutor timeoutControl = (ScheduledThreadPoolExecutor) Executors.newSingleThreadScheduledExecutor();

schduledThreadPoolExector实现了schduledExecutorService。如果我不能将它与实际的类一起使用,这个执行器调用的意义是什么?

我用错了吗(可能),有人能提供一些指导吗?

共有3个答案

佴英奕
2023-03-14

为了简化:

实现接口的类可以具有接口没有的其他方法和字段。在这种情况下,该方法返回接口,因此您不能将其向下转换到实现类。

马高谊
2023-03-14

您应该只将返回的执行器用作< code > ScheduledExecutorService ,而不是将其转换为< code > ScheduledThreadPoolExecutor 。

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
赵选
2023-03-14

问题是 Executors.new单线程调度模拟器(); 实际上并没有返回一个调度线程池演示器

执行器类中的源代码:

public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
}

<代码>委托...类(还有一个< code > DelegatedExecutorService )只是将所有调用传递给底层执行器,在本例中是< code > ScheduledThreadPoolExecutor 。代码中的注释表明,这些类的全部意义在于隐藏底层执行器可能拥有的所有非接口方法。

无论如何,最好使用接口,而不是您正在处理的对象的类版本(List而不是ArrayList 而不是<code>Scheduled ThreadPoolExecutor)。

如果您绝对需要ScheduledThreadPoolExector中可用的功能而不是ScheduledExecutorService中可用的功能,您可以使用ScheduledThreadPoolExector的构造函数来创建它的实例。

 类似资料:
  • 但没有。在应用程序中创建的dispatcher线程使我在优化dispatcher配置时束手无策。每次重新启动应用程序时,我都看到创建了不同数量的dispatcher线程(每次启动应用程序后,我都通过线程转储检查这一点)。 甚至线程数也不等于我在Parallelism-min中定义的线程数。由于这个低线程数,我的应用程序的处理速度非常慢。一查号码。通过下面的代码: GetRuntime().Avai

  • 我需要帮助设计基于多线程的应用程序,包括动态url创建和线程处理。 我在我的应用程序中使用了一个Spring调度器,它每30秒调度一次。从这个调度方法中,我调用了一些基于服务的api,它在循环中,而且我需要每个API有一个线程池执行器,上面有一个线程处理。 由于这个过程是从计划方法开始的,所以每次创建新的线程池时,这就是问题所在。你可以在代码中看到。 我想要的是,如果对于任何一个应用编程接口,如果

  • 本文向大家介绍C#程序创建线程池,包括了C#程序创建线程池的使用技巧和注意事项,需要的朋友参考一下 对于线程池,创建两个以上的函数并排队执行方法。 首先,创建类似的方法- 以相同的方式,创建更多方法,然后使用 ThreadPool.QueueUserWorkItem将方法排队以执行- 示例 您可以尝试运行以下C#代码来创建线程池。 输出结果

  • 我正在使用线程池执行器更改遗留设计。详情如下:- 遗留:-对于遗留设计,在应用程序启动时创建600个线程。和放置在各种池中,然后在需要时提取这些池,并将任务分配给相应的线程。 新:-在新设计中,我将线程池替换为执行器服务 我观察到的是,对于Executor,在启动时不会创建线程。它们是在从客户端激发请求时创建的。因此,与前一个线程相比,在内存中创建的线程要少得多。 但我的问题是,这样做是否正确,因

  • 问题内容: 根据我一直在阅读的定义: 线程基本上是并发(同时)运行的代码段 。 但是,如何在存在线程调度程序的情况下同时运行它们? 我读到,线程调度程序基本上是从线程池中随机选择一个线程在某个时刻运行。从中我得到一个确切的时间点,只有一个可运行线程真正处于运行状态(运行)。( 所有这些均来自SCJP Sun认证程序员学习指南 )有人可以澄清吗? 这些线程是否真正同时运行? 问题答案: 但是,如何在

  • 主要内容:1 ScheduledThreadPoolExecutor的概述,2 ScheduledThreadPoolExecutor的重要属性,3 ScheduledFutureTask内部类,4 DelayedWorkQueue内部类,5 ScheduledThreadPoolExecutor的构造器,6 schedule一次性任务,6.1 triggerTime任务触发时间点,6.2 delayedExecute延迟/定期执行核心方法,,,,,,,此前我们学习了ThreadPoolExec