Java 从线程中释放资源

Java 从线程中释放资源,java,multithreading,garbage-collection,Java,Multithreading,Garbage Collection,在我的应用程序中(在我的工作中),我们维护套接字连接池来处理通信。有许多线程(数量很大)从池中获取活动连接,使用它并关闭它。但问题是,在这两者之间的某个地方调用了垃圾收集器来收集未使用的引用 现在,在调用垃圾收集器之后,我想: 暂停所有参与通信的线程(请注意,我的线程与GC一起运行->我的意思是调度使之成为可能) 从状态可能介于两者之间的线程(即对套接字连接的引用)中释放套接字连接,或者如果实际上不可行,则: 如何在使用资源的所有线程完成后延迟GC调用。此外,在这种情况下,可能需要确定相关线程是

在我的应用程序中(在我的工作中),我们维护套接字连接池来处理通信。有许多线程(数量很大)从池中获取活动连接,使用它并关闭它。但问题是,在这两者之间的某个地方调用了垃圾收集器来收集未使用的引用

现在,在调用垃圾收集器之后,我想:

  • 暂停所有参与通信的线程(请注意,我的线程与GC一起运行->我的意思是调度使之成为可能)
  • 从状态可能介于两者之间的线程(即对套接字连接的引用)中释放套接字连接,或者如果实际上不可行,则:
  • 如何在使用资源的所有线程完成后延迟GC调用。此外,在这种情况下,可能需要确定相关线程是否已完成其工作

  • 如果您关心GC何时运行,那么您的应用程序设计就被破坏了

    修正你的设计



    注意:尽管有关于垃圾收集器应该如何操作的规范,但JVM实现甚至都不需要垃圾收集器

    在Java中,您无法与GC进行这种细粒度的交互。您试图解决的实际问题是什么?这听起来像是需要对.gc进行调优,因为线程的数量很大。因此,线程完成后,将有相当大的内存占用。运行GC不会有任何好处。因此,您希望延迟到所有相关线程完成或释放资源somehow@MridulVishal对于gc何时运行,您没有任何控制权,Java中也没有通知您gc的观察器模式,这超出了您的控制范围