当前位置: 首页 > 面试题库 >

为什么ScheduledExecutorService无法按需生成线程?

终翔
2023-03-14
问题内容

在我的应用程序中,我使用ScheduledExecutorService,但仅产生一个线程来处理计划的任务。这是因为ScheduledExecutorService不会生成线程来处理待处理的任务吗?

这是一个代码片段,将仅输出“ run()1”,而不是预期的“ run()1”,后跟“ run()2” …“ run()10”。

public class App {

    public static void main(String[] args) {
        int N = 10;
        Runnable runner = new Runnable() {

            public void run() {
                foo();
            }
        };
        for (int i = 0; i < N; i++) {
            executor.schedule(runner, i, TimeUnit.MILLISECONDS);
        }
    }

    private static void foo() {
        System.out.println("run() " + (++n));
        synchronized (executor) {
            try {
                executor.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println("finished()");
    }
    private static Logger logger = Logger.getLogger(App.class.getName());
    private static int n = 0;
    private static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
}

问题答案:

只有一个线程,因为您使用创建线程池Executors.newScheduledThreadPool(1),这意味着该线程池仅包含1个线程。如果需要10个线程,则将10作为参数传递。请注意,此方法返回的ScheduledThreadPoolExecutor文档明确指出线程池的大小是固定的。



 类似资料:
  • 问题内容: 我正在尝试在表上创建一个外键,该键必须指向表内的列。但是当我尝试以下操作时,它不起作用。将不会产生。它只是在表内添加列名。 我究竟做错了什么?如何在表内部使外键指向表? 问题答案: 我认为您需要: 我把我的自动迁移声明放在这样 让我知道是否有帮助。

  • 问题内容: Lambda转换是一个两步过程, 一个是 :将lambda分解为同一类中的静态方法。 [ private static void Main.lambda $ main $ 0() ,public static void Main.main(java.lang.String [])] 二 :生成实现功能接口的类。 已生成一个类:类Main $$ Lambda $ 1/149928006

  • Lambda转换是一个两步的过程,第一步:将Lambda解聚为同一个类中的静态方法。

  • 问题内容: 我有一个在目录下生成源的插件。它被连接到generate- sources阶段,如下所示: 问题是,当我使用文件时,文件将不会放在罐子中。我在那里看到所有文件,但没有。 我阅读了有关此问题的所有问题,但不知道如何解决该问题。我正在使用Maven3.0.x。 问题答案: build-helper插件确实解决了这个问题。感谢@Joe的评论。

  • 在Flutter中,当使用< code>showDatePicker时,为什么不立即接受按下的日期值(不必按OK)? 例如,如果小部件最初在2019年9月10日打开,我想选择2019年10月5日,我希望将月份切换到10月,然后从日历显示中按5,日历显示将自动接受日期为2019年十月5日,而无需按OK按钮。 有没有办法避免按下OK按钮?

  • 我想知道当您用@Transactional和ScheduledExecutorService注释一个方法时,实际会发生什么? 假设methodA是从外部调用的。我假设调用methodA时,someDao.methodao()加入事务中,scheduleMethodB()立即返回,这是否正确。 我知道@Transactional是基于代理的,methodB调用也是基于scheduler下的self调