gpt4 book ai didi

java - spring ConfigurableApplicationContext 内存泄漏

转载 作者:行者123 更新时间:2023-12-01 12:04:09 26 4
gpt4 key购买 nike

public class Tasker{
ConfigurableApplicationContext context ;

public void load(){
context = = loadSpringContext();
}

pulic void doSomething(){
//do something
}

public void close(){
context.close();
}
}


public class Caller extends Thread {

public void run(){
Tasker tasker = new Tasker();
try{
tasker.load();
tasker.doSomething();
}finally(){
tasket.close();
}
}

}

//sample driver code which is not in my control
Caller caller = new Caller()
caller.start();
caller.stop();

现在的问题是,如果有人调用杀死线程,我的 Spring 上下文永远不会关闭,并且内存泄漏。我该如何防止它?

注意:我无法更改驱动程序代码。

最佳答案

Thread.stop 是邪恶的并且被严重弃用,永远不应该使用。它使线程没有机会自行清理。在您的情况下,可能永远不会调用 Tasker.close 方法,因为线程立即停止。您可以通过在 Tasker 方法中放入一些日志语句来验证这一点,这些语句会在实际发生时打印出来。

最好使用 Thread.interrupt 来代替,并且该线程中的代码会定期检查中断。

如果这是因为调用了您无法控制的代码,那么您就不走运了,因为此类代码意味着您无法正确控制上下文的生命周期。

关于java - spring ConfigurableApplicationContext 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769167/

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