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

时间:2018-07-04 01:15:51

标签: java multithreading runnable

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

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

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

2 个答案:

答案 0 :(得分:1)

使用Map,其值等于Runnables,其键为System.identityHashcode()。并不完美,但会尽力而为。

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

答案 1 :(得分:1)

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