ThreadLocal закрываются после того, как поток, использующий их, умирает.Если вы хотите контролировать это, вам нужно вместо этого использовать карту.
// do our own thread local resources which close when we want.
Map<Thread, Resource> threadLocalMap = new ConcurrentHashMap<>();
fj.submit(
() -> myStream.parallel().forEach(e -> {
Resource r = threadLocalMap.computeIfAbsent(Thread.currentThread(), t -> new Resource();
// use the thread local autocloseable here,
})
// later once all the tasks have finished.
// close all the thread local resources when the parallel processing is done
threadLocalMap.values().forEach(Utils::closeQuietly);
Обычно существует метод, который закрывает ресурсы, не вызывая исключения.У Chronicle есть одна, но и у многих других библиотек.
public static void closeQuietly(Closeable c) {
if (c != null) {
try {
c.close();
} catch (IOException ioe) {
// ignore or trace log it
}
}
}
Скорее всего, у вас уже есть метод сделать это в вашем проекте https://www.google.co.uk/search?q=public+static+void+closequietly+Closeable