gpt4 book ai didi

java - 当线程(不是我开始的)结束时如何通知我?

转载 作者:行者123 更新时间:2023-11-29 07:46:34 25 4
gpt4 key购买 nike

我在 Jar 文件中有一个库,需要跟踪有多少线程使用了我的库。当一个新线程进来时没问题:我将它添加到列表中。但是我需要在线程死亡时从列表中删除该线程。

这是在一个 Jar 文件中,所以我无法控制何时或有多少线程通过。因为我没有启动线程,所以我不能强制应用程序(使用我的 Jar)在我的 Jar 中调用一个方法,上面写着“这个线程正在结束,将它从你的列表中删除”。我真的宁愿不必使用 Thread.isAlive() 不断遍历列表中的所有线程。

顺便说一下:这是一些 C++ 代码的移植,它驻留在 DLL 中并且可以轻松处理 DLL_THREAD_DETACH 消息。我想要 Java 中的类似内容。

编辑:

保留线程列表的原因是:出于业务原因,我们需要限制使用我们的库的线程数量。当线程进入我们的库时,我们检查它是否在列表中。如果没有,则添加。如果它在列表中,我们检索一些特定于线程的数据。当线程死亡时,我们需要将其从链表中移除。理想情况下,我希望在它死亡时收到通知,以便我可以将其从列表中删除。我可以将数据存储在 ThreadLocal 中,但这仍然无法帮助我获得线程何时结束的通知。

编辑2:最初的第一句话是:“我在 Jar 文件中有一个库,需要跟踪使用库中对象的线程。”

最佳答案

通常你会让 GC 清理资源。您可以向线程添加一个组件,当它不再可访问时将被清理。

如果您使用自定义线程组,当从组中删除线程时,我会收到通知。如果您使用组中的线程启动 JAR,它也将成为组的一部分。您还可以更改线程组,以便通过反射通知它。

但是,每隔几秒轮询一次线程可能会更简单。

关于java - 当线程(不是我开始的)结束时如何通知我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146734/

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