Java并发编程:线程池阻塞问题案例

原创 r囧r小猫 2024-09-19 07:57 206阅读 0赞

在Java的并发编程中,线程池阻塞问题通常与调用非空线程池的shutdown()方法或者shutdownNow()方法有关。

例如,以下代码会遇到问题:

  1. // 创建一个非空线程池
  2. ExecutorService executor = Executors.newFixedThreadPool(10);
  3. // 一些任务提交给线程池执行
  4. for (int i = 0; i < 20; i++) {
  5. executor.execute(new Task(i)));
  6. }
  7. // 在使用shutdown()方法后,如果还有未完成的任务,会阻塞调用者
  8. executor.shutdown();
  9. // 然而,如果你想立即停止所有任务并返回已提交的任务列表,应该使用shutdownNow()
  10. List<Runnable> tasks = executor.shutdownNow().getTasks();

在上述代码中,shutdown()方法默认等待所有任务完成。因此,当调用executor.shutdown();后,后续的尝试获取新任务将被阻塞。

shutdownNow()方法则会立即停止所有正在执行的任务,并返回一个包含了这些未完成任务引用的列表。这样就可以避免阻塞问题。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,206人围观)

还没有评论,来说两句吧...

相关阅读