Java并发工具类如ExecutorService使用不当示例

原创 桃扇骨 2024-12-12 12:15 176阅读 0赞

在Java中,ExecutorServicejava.util.concurrent包中的一个工具类,用于管理和调度线程。以下是一些使用不当的示例:

  1. 无休止的提交任务

    1. ExecutorService executor = Executors.newFixedThreadPool(10);
    2. // 不对的任务提交方式
    3. for (int i = 0; i < 1000; i++) {
    4. Runnable task = () -> System.out.println("Task " + i));
    5. // 不需要立即执行的任务提交,会导致线程池堵塞
    6. executor.submit(task);
    7. }
    8. // 忽略关闭操作
    9. // 等待所有任务完成并关闭后,再释放资源
    10. // executor.shutdown();
  2. 无限制添加新线程

    1. ExecutorService executor = Executors.newFixedThreadPool(10);
    2. // 一次性提交过多的请求,会导致线程池无法处理新任务
    3. List<Runnable> tasks = new ArrayList<>();
    4. for (int i = 0; i < 500; i++) {
    5. tasks.add(() -> System.out.println("Task " + i)));
    6. }
    7. executor.invokeAll(tasks);
    8. // 不需要关闭操作,因为已经提交了所有任务
    9. // executor.shutdown();
  3. 错误地取消任务

    1. ExecutorService executor = Executors.newFixedThreadPool(10);
    2. // 错误地提前取消任务,但任务实际上并未完成
    3. Future<?> future = executor.submit(() -> System.out.println("Task completed after cancellation.")));
    4. // 等待的逻辑错误,应该检查future是否被cancel
    5. try {
    6. future.get(); // 这里会等待任务完成,但实际上任务已经被取消了
    7. } catch (CancellationException ce) {
    8. // 正确地处理任务取消的情况
    9. System.out.println("Task cancelled by ExecutorService.");
    10. }
    11. // 错误地关闭executor,导致未完成的任务被丢弃
    12. // executor.shutdown();

    以上示例展示了不当使用ExecutorService的一些常见错误。在实际编程中,应遵循好用、高效和资源管理的原则。

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

发表评论

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

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

相关阅读