Java Как однозначно идентифицировать Runnable, выполняемый в потоке - PullRequest
0 голосов
/ 04 июля 2018

Я хочу найти способ идентифицировать экземпляр Runnable во время выполнения. По сути, я создаю временный кеш, доступный потоку через ThreadLocal, но привязать его к потоку недостаточно, так как мое приложение использует пул потоков, поэтому один и тот же поток будет повторно использоваться снова и снова. Поскольку Runnable, который передается в поток, не будет повторно использоваться, я хотел найти способ добраться до Runnable, чтобы у меня был способ идентифицировать тот же Runnable во время выполнения. Он будет использоваться в качестве ключа для Map, так что даже простое возвращение toString () будет адекватным.

Я не создаю пул потоков, а потоки создаются из нескольких пулов, поэтому я бы предпочел не пытаться расширять процесс создания потоков / Runnable, если это возможно.

Кажется, я не могу найти способ найти что-нибудь полезное из Thread.currentThread (), но использование этого было бы предпочтительным, если это возможно.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Если вы хотите использовать Thread.currentThread(), вы можете проверить трассировку стека , что позволит вам определить, что работает. Если вы подклассом Runnable для каждой задачи, вы можете легко определить, какой выполняемый выполняется. В противном случае вы можете проверить глубже в стеке (т. Е. Любой код, вызываемый исполняемым файлом), чтобы эвристически определить, что выполняется.

0 голосов
/ 04 июля 2018

Используйте значения Map, для которых Runnables, а ключ - System.identityHashcode(). Не идеально, но так хорошо, как вы получите.

Или сделайте так, чтобы каждый Runnable имел свой собственный атрибут UUID и использовал его в качестве ключа. Теперь это прекрасно. Но дороже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...