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

我想找到一种在执行过程中标识Runnable实例的方法。基本上,我正在创建一个临时缓存,该线程可以通过ThreadLocal访问,但是将其绑定到Thread还不够,因为我的应用程序正在使用线程池,因此同一线程将一再被重复使用。由于传递给线程的Runnable将不会被重用,因此我想找到一种进入Runnable的方法,这样我就可以在执行过程中找到相同的Runnable。它将用作Map的键,因此即使只是toString()的返回也足够了。

我不是在创建线程池,而是从多个池中创建线程,因此,如果可能的话,我宁愿不要尝试扩大Thread / Runnable创建过程。

我似乎找不到从Thread.currentThread()获取任何有用信息的方法,但如果可能的话,最好使用该方法。


湖上湖
浏览 269回答 2
2回答

三国纷争

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

摇曳的蔷薇

使用Mapwhoes值作为Runnables,其键为System.identityHashcode()。虽然不完美,但效果却不尽如人意。否则,使每个属性Runnable都有其自己的UUID属性并将其用作键。现在很完美。但是更贵。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java