Я ищу способ добавить поля в поток на лету, переписав байтовый код и перезагрузив класс, но не уверен, что это вообще возможно. Любые указатели приветствуются. Я нашел некоторую информацию об изменении и загрузке класса, и я знаю, что JRebel может легко заменить ваш код в горячем режиме, но не уверен, что здесь применим тот же подход/инструменты.
Мотивация здесь заключается в изучении теоретически лучшей альтернативы локальным объектам потока. Если метод сработает, я смогу заменить локальный поток аннотацией, и результат должен превзойти текущую реализацию JDK.
PS: Пожалуйста, сохраните меня "корень всех злых слов"
Уточнение варианта использования:
Представьте, что у меня есть класс с ThreadLocal:
class A {
ThreadLocal<Counter> counter;
...
counter.get().inc()
}
Я хотел бы заменить это аннотацией:
class A {
@ThreadLocal
Counter counter;
...
counter.inc()
}
Но вместо того, чтобы сгенерировать приведенный выше код, я хотел бы изменить Thread так, чтобы Thread теперь имел поле Acounter, а фактический код был бы таким:
class A {
// Nothing here, field is now in Thread
...
Thread.currentThread().Acounter.inc()
}