2016-09-07 1 views
0

Каждый раз, когда создается или выбирается новый поток из потока, я хочу иметь возможность установить некоторую контекстную информацию об этом.Как установить информацию о контексте потока с помощью ASM?

Буду признателен за рекомендации относительно наилучшего подхода к использованию с использованием ASM.

Спасибо, Надав

+1

Вы должны быть более конкретными относительно части «выбрали из потока». Это логическая операция, чья фактическая реализация может распространяться на несколько методов и классов, семантика которых может быть не очевидна для программного обеспечения обработки байтового кода. – Holger

+0

В принципе, я хочу, чтобы каждый раз, когда пользователь планировал выполнение работы, я смогу передать некоторые метаданные в поток, который его выполняет. Я хочу иметь идентификатор транзакции, который начинается в какой-то момент во время выполнения, а затем я хочу передать его в любой новый поток, чтобы я мог видеть, что он принял участие в этой конкретной транзакции. – nadavy

ответ

0

Это требует, чтобы инструмент методы, которые начинаются нитью или что проходимая, когда пул потоков запускает новую задачу. Это делает вперед с прямыми:

  1. Вы можете инструмент метод Thread::start для установки такого значения для Thread.
  2. Вы можете измерить ThreadPoolExecutor::beforeExecute, чтобы установить состояние Thread на ThreadPoolExecutor. Это невозможно сделать для общих Executor s, так как они не обязательно должны поддерживаться Thread.
+0

Я предполагаю, что для инструментария этих классов требуется переопределение классов? – nadavy

+1

Да, да. Эти классы используются самой виртуальной машиной, так что они загружаются при выполнении вашего агента. –

+1

@nadavy: если вы создаете подкласс 'ThreadPoolExecutor', вы можете просто переопределить' beforeExecute', как предполагалось. Возможно, вы можете избежать использования байтового кода, разработав приложение в первую очередь. – Holger

Смежные вопросы