将 脚本之家 设为“星标⭐”
第一时间收到文章更新
原创:程序员牛肉(ID:gh_8adabf391378)
// 创建单线程的线程池
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(() -> {
try {
// 输出日志信息,表示第一个任务开始执行
log.info("First");
// 向线程池提交第二个任务,并等待第二个任务执行完成
pool.submit(() -> log.info("Second")).get();
// 输出日志信息,表示第一个任务后续操作继续执行
log.info("Third");
} catch (InterruptedException | ExecutionException e) {
// 若出现异常,记录错误日志
log.error("Error", e);
}
});
BlockingQueue
接口。与有界阻塞队列不同,无界阻塞队列理论上可以存储无限数量的元素。当向无界阻塞队列中添加元素时,它不会因为队列已满而阻塞(除非遇到系统资源限制,如内存不足等极端情况)]ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(() -> {
try {
log.info("First");
// 使用CompletableFuture异步提交子任务,并在子任务完成后执行后续逻辑
CompletableFuture.runAsync(() -> log.info("Second"), pool)
.thenRun(() -> log.info("Third"));
} catch (Exception e) {
log.log(Level.SEVERE, "Error", e);
}
});
public static void main(String[] args) {
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(ThreadPoolExampleRewrittenWithMethods::firstTask);
pool.shutdown();
}
public static void firstTask() {
try {
log.info("First");
secondTask();
log.info("Third");
} catch (Exception e) {
log.log(Level.SEVERE, "Error", e);
}
}
public static void secondTask() {
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(() -> log.info("Second"));
pool.shutdown();
}
}
推荐阅读:
推荐阅读: