gpt4 book ai didi

Java线程,线程完成后如何释放资源

转载 作者:行者123 更新时间:2023-12-02 10:58:33 25 4
gpt4 key购买 nike

我有一个从Thread扩展的java类,例如我想将消息发送到队列,但想为每个线程重用Producer。在 Thread 完成之前不要关闭它。

public class Producer extends Thread {
private final QueueProducer producer;

public Producer() {
Properties props = new Properties();
producer = new QueueProducer(props);
}

public void send(String message) {
producer.send(message);
}

// close?
}

这段代码如何调用close方法?

最佳答案

如果QueueProducer没有实现Closeable并且没有提供关闭其资源的方法,那么您无法显式关闭它。最好的方法是限制其在 run 方法内的范围,从而有资格进行 GC。

但是,如果它是 AutoCloseableCloseable,则用 try-with-resources block 包装 QueueProducer 以在使用后自动关闭它。

public void run(){

try(QueueProducer qp = producer){
//do operation on qp
}
}

或者让Producer实现Closeable。在其重写的 close 方法中,将关闭 QueueProducer。例如:-

class Producer extends Closeable{

private final QueueProducer qp;

....

@Override
public void close(){

if(qp!=null){
qp.close();
}
}
}

这与 BufferedReader 类似,其 close 方法关闭其内部 Reader 对象。因此,QueueProducer 保持可用,直到客户端关闭 Producer 本身。

关于Java线程,线程完成后如何释放资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529981/

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