Discuss / Java / 关于守护线程不能持有需要关闭的资源的疑问。

关于守护线程不能持有需要关闭的资源的疑问。

Topic source

守护线程不能持有需要关闭的资源

如果用try-catch-finally或者Try-with-resources能自行关闭资源吗?

🌙

#2 Created at ... [Delete] [Delete and Lock User]

当然可以...

刚写完又不确定了,哈哈哈....

非科班太难了,其实一直太不懂,关闭资源是什么意思,也不太明白,没有关闭文件还会导致文件丢失.

🌙

#3 Created at ... [Delete] [Delete and Lock User]

public class Test05 {
public static void main(String[] args) throws IOException {
for (int i = 0; i < 10000000; i++) {
System.out.println("加载次数:" + i);
InputStream is = new FileInputStream("D:\\person.xml");
is.close();
}

}
}

public class Test05 {
public static void main(String[] args) throws IOException {
for (int i = 0; i < 10000000; i++) {
System.out.println("加载次数:" + i);
InputStream is = new FileInputStream("D:\\person.xml");
}

}
}

未加close方法,通过电脑任务管理器看到,idea内存一直在增加,不过每次好像都只加0.1m

加了 close 方法 idea 内存达到固定值 基本上就不变了

参考地址Java InputStream未调用close方法进行资源关闭造成直接内存泄漏_coldice0521的博客-CSDN博客_inputstream不关闭会怎样

总算是有点明白了,还是有点不明白资源丢失是什么意思,也有有一天会明白的

🌙

#4 Created at ... [Delete] [Delete and Lock User]

不可以,应该为守护线程 会随时被中断

🌙

#5 Created at ... [Delete] [Delete and Lock User]

守护线程不能持有任何需要关闭的资源,例如打开文件等,因为虚拟机退出时,守护线程没有任何机会来关闭文件,这会导致数据丢失。

可能就和你直接把U盘从电脑上拔下来,效果差不多


  • 1

Reply