java autocloseable_java – 关闭AutoCloseable的正确方法

我应该使用try-catch-finally吗?或者是一个关机钩子.

解决方法:

像这样:

try (OutputStream stream = new ...) {

... // use the resource

} catch (IOException e) {

... // exception handling code

}

try (

OutputStream out1 = ...;

OutputStream out2 = ...;

InputStream in1 = ...;

InputStream in2 = ...;

) {

...

}

不要使用shutdown-hook:资源很少真正是gloabl,这种方法将容易发生种族危害. try-with-resources是正确关闭所有AutoCloseable资源的推荐方式:两者同时引入Java,以便它们可以一起工作.

这样做有助于实现(推荐)规则,只有负责创建或打开某些东西的代码负责处理或关闭它:如果一个方法传递给一个OutputStream,它永远不应该关闭()它.它应该依赖于调用者关闭它.如果您的方法都没有显式调用close(),则保证您的代码永远不会抛出异常(例如“Socket closed” java.net.SocketException),因为它会尝试使用已关闭的资源.

这样做可确保资源恰好关闭一次.请注意,通常不止一次关闭AutoCloseable是不安全的:close()操作不保证是幂等的.

标签:outputstream,java,resources,serversocket

来源: https://codeday.me/bug/20190916/1806761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值