编程语言
首页 > 编程语言> > java-清理使用ExecutorService提交的线程

java-清理使用ExecutorService提交的线程

作者:互联网

我的代码如下:

public Future<String> getFuture() {
  ExecutorService executorService = Executors.newSingleThreadExecutor();
  Future<String> future = executorService.submit(() -> {
    //do something
    return "test string";
  });
  executorService.shutDown(); // is this correct?
  return future;
}

我打电话给其他班级的人来获得未来:

 Future<String> future = getFuture();
 String result = future.get();
 future.cancel(true); // will this assure that there wont be any thread leak?

现在不在executorService.shutDown()和future.cancel(true)中,这将确保不会出现线程泄漏?

请注意,当我在Thread.getAllStackTraces()的结果中检查当前正在运行的线程时,调用future.cancel(true)之后,我仍然可以找到将来执行该线程的线程.

解决方法:

您在问错问题!

在方法中创建服务然后将其丢弃就没有意义了.

创建该服务实例不是免费的.这种抽象的整体思想是确保有效利用基础架构元素!

换句话说:退后一步并重新设计.这样该服务就成为某个类的领域!是的,这可能会变得很复杂.但是最有可能的是,与继续使用您的问题中所示的方法相比,在那个角落花费时间可以带来更长远的回报.

标签:java-threads,multithreading,java
来源: https://codeday.me/bug/20191111/2018362.html