Помістіть Javadoc :
Потоки мають метод BaseStream.close () та реалізують функцію автозахисту, але майже всі екземпляри потоку насправді не потрібно закривати після використання. Зазвичай закриття потребуватимуть лише потоки, джерелом яких є канал IO (наприклад, ті, які повертаються Files.lines (Path, Charset)). Більшість потоків підтримуються колекціями, масивами або генеруючими функціями, які не потребують спеціального управління ресурсами. (Якщо потік вимагає закриття, його можна оголосити як ресурс у операції "спробування ресурсів".)
"Майже всі" та "загалом" розпливчасті - якщо ви пишете бібліотеку і ви абстрагуєте джерело свого потоку від користувачів цього потоку, то вам завжди все-таки слід задати собі питання - "чи варто закривати це? " Підтримувані IO потоки потрібно закрити, оскільки операції терміналу не дзвонять close
, тому ефективно мені завжди доводиться або пам'ятати / документувати, звідки надходить мій потік, або мені завжди до close
нього.
Ядерним варіантом, мабуть, було б не повертати потоки з методів або приймати параметри потоку, що є почуттям, яке відлучили деякі люди в команді JDK. Я вважаю це занадто обмежуючим, враховуючи практичну корисність потоків.
Які ваші найкращі практики щодо закриття потоків? Я шукав в Інтернеті відповідь на це у деяких людей JDK, які зазвичай активні на подібні питання спільноти, але не знайшли нічого актуального.