在我的应用程序中,我使用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调