gpt4 book ai didi

java - 如何从(资源对象的)终结器中抛出

转载 作者:行者123 更新时间:2023-11-30 11:51:32 25 4
gpt4 key购买 nike

终结器不是析构器,终结器没有用。

据我所知,很多 Java 资源对象都在 finalize() 上“以防万一”。
这似乎是一种过于宽容的态度,可能会导致错误。

您至少要做的是让 finalize 记录错误(在完成时未处理的资源)并将它们打印到标准输出,然后处理。
一种更严格的态度可能是抛出异常。我不一定要实现此类限制性资源对象,但我想知道如何实现。

但在 Java 中,终结器中抛出的异常会被忽略(除了将对象放回列表中以再次终结)。有没有办法实现这样的事情?如果创建对象的线程仍然存在(或者如果不存在,则可能是父线程),也许可以为创建对象的线程提供终结器的异常?

还有!!!!!!其他 gc 语言(尤其是 C#、python 等)如何处理资源终结(它们通常是否为资源类实现“以防万一处置”?),从终结器中抛出,为其他线程提供豁免。 (注意:我不太关心使用/使用 sugar 来调用 dispose 方法或接受自动关闭资源的闭包的方法,我对终结器扮演什么角色以及终结器的错误传播很感兴趣)。

最佳答案

终结器在专用线程中调用,因此抛出异常或错误不会有任何效果,因为您无法在代码或线程之一中捕获异常。

如果你想将异常传递给另一个线程,你可以通过多种方式来实现。但是我不清楚你会在另一个线程中做什么,你会在当前线程中做什么。即,当您可以让当前线程记录一条消息时,为什么要创建一个异常传递给另一个线程以变成日志消息。

关于java - 如何从(资源对象的)终结器中抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7371109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com