在单例 class 中使用 future 是个坏主意吗?

Is it a bad idea to use a future inside a singleton class?

我目前在一家公司实习,刚开始接触他们的代码。我注意到他们有使用单例 classes 的任务,但是在单例 class 内部有一个用于获取线程转储的未来对象。

代码是这样的:

singltonclass{
private ExecutorService x= Executors.newFixedThreadPool(1);
getInstance method(){}
methodThatFetchsThreadDumps(){
future is used here;
}
}

在单例中使用 future 是个好主意吗?如果使用这个单例的任务运行两次并重叠会怎样?多次使用单例不会导致 future 出现意外行为吗?

这不一定是坏事。 Future 将确保返回的对象跨线程可见。线程池的大小固定为 1,因此如果有并发请求,第二个线程会阻塞,直到唯一的工作线程可用,此时它已经从前一个任务中移交了结果。不应发生重叠。