バイトコードを書き直してクラスをリロードすることで、その場でスレッドにフィールドを追加する方法を探していますが、それが可能かどうかはわかりません。どんなポインタも歓迎します。クラスの変更とロードに関する情報を見つけました.JRebelがコードをシームレスにホットスワップできることは知っていますが、同じアプローチ/ツールがここに適用されるかどうかはわかりません.
ここでの動機は、スレッド ローカル オブジェクトの理論的に優れた代替手段を探ることです。メソッドが機能する場合、スレッド ローカルをアノテーションに置き換えることができ、結果は現在の JDK 実装よりも優れているはずです。
追伸:「諸悪言論の根源」を救ってください
ユースケースの明確化:
ThreadLocal を持つクラスがあるとします。
class A {
ThreadLocal<Counter> counter;
...
counter.get().inc()
}
それを注釈に置き換えたい:
class A {
@ThreadLocal
Counter counter;
...
counter.inc()
}
しかし、上記のコードが生成される代わりに、Thread が Acounter フィールドを持ち、実際のコードが次のようになるように Thread を変更したいと思います。
class A {
// Nothing here, field is now in Thread
...
Thread.currentThread().Acounter.inc()
}