为了账号安全,请及时绑定邮箱和手机立即绑定

Java如何唯一标识正在线程中执行的Runnable

Java如何唯一标识正在线程中执行的Runnable

湖上湖 2021-04-25 20:17:38
我想找到一种在执行过程中标识Runnable实例的方法。基本上,我正在创建一个临时缓存,该线程可以通过ThreadLocal访问,但是将其绑定到Thread还不够,因为我的应用程序正在使用线程池,因此同一线程将一再被重复使用。由于传递给线程的Runnable将不会被重用,因此我想找到一种进入Runnable的方法,这样我就可以在执行过程中找到相同的Runnable。它将用作Map的键,因此即使只是toString()的返回也足够了。我不是在创建线程池,而是从多个池中创建线程,因此,如果可能的话,我宁愿不要尝试扩大Thread / Runnable创建过程。我似乎找不到从Thread.currentThread()获取任何有用信息的方法,但如果可能的话,最好使用该方法。
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

如果要使用Thread.currentThread(),可以检查线程的堆栈跟踪,这将使您确定正在运行的线程。如果Runnable为每个任务创建子类,则可以轻松确定正在执行的可运行对象。否则,您可以更深入地检查堆栈(即,可运行程序正在调用的任何代码),以启发式确定正在执行的内容。


查看完整回答
反对 回复 2021-05-12
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

使用Mapwhoes值作为Runnables,其键为System.identityHashcode()。虽然不完美,但效果却不尽如人意。

否则,使每个属性Runnable都有其自己的UUID属性并将其用作键。现在很完美。但是更贵。


查看完整回答
反对 回复 2021-05-12
  • 2 回答
  • 0 关注
  • 268 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信