java - 我可以在多大程度上依赖 Java 的垃圾收集(Groovy)?

标签 java groovy garbage-collection

我在 Swing 应用程序中有一个状态栏,可以连续打印状态。应用程序中的所有对象和类都将使用此 setStatus 方法来绘制状态栏

public def setStatus(statusText){       
        Thread.start {
             ljaStatusBarButton.setText("Status : $statusText . . . .")
             sleep(3000)
             ljaStatusBarButton.setText("Status : Waiting for user action . . . .")
                     interrupt() // or stop() ?  
        }
    }

状态栏将显示状态 3 秒,然后恢复为等待用户操作的状态。

这确实可以正常工作,但我担心的是,上面的方法将从 UI 中多次调用,这也意味着每次设置状态时都会创建一个新的 Thread 对象。请记住这一点,我在末尾显式添加了一个 interrupt() ,因为我想向编译器表明我不再需要该线程。而且,我可以在 Java 的垃圾收集上赌多少,以确保停止/中断的线程很快被清理掉?或者对于这个多线程对象问题有更好的解决方法吗?

最佳答案

您不需要interrupt()

在 Java 中,线程在 run() 方法完成时结束(通常通过返回,或者异常通过抛出异常)。

这意味着,一旦执行第二个 setText() 调用,Thread 将停止运行。由于没有其他任何东西引用创建的 Thread 对象,因此它迟早会被垃圾收集。

关于java - 我可以在多大程度上依赖 Java 的垃圾收集(Groovy)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979961/

相关文章:

java - 我可以让堆太大吗?

java - 无法使用相对 xpath 找到元素

java - 将 JPanel 添加到 JList

javascript - 填写表格正常,但验证不采用字段内容

groovy - 长数据类型的奇怪行为

c# - 这是内存泄漏还是垃圾收集会修复它

java - JPA @ManyToOne @JoinFormula 抛出 ClassCastException

java - 从 Java 应用程序使用 Groovy 库

groovy - 在 Jenkins Pipeline DSL 中迭代一个常规列表

java - 垃圾收集与交换、分页之间的关系