大家讲道理2017-04-18 10:39:44
設計上、ThreadLocal
应该依附于Thread
的存在而存在,每一个线程都可以有一份空间来存储,所以你说的第2点我非常赞同,至于第1点,我不太看得懂。
如果按照你的设计,将map
放在ThreadLocal
,那么这个map
得是static
的(或者ThreadLocal
单例中的成员变量),这样在设计上存在严重问题,这个map
の管理は非常に困難になります:
デザインには一連の手法、さらには関連する哲学があり、それらを注意深く味わう必要があります。
黄舟2017-04-18 10:39:44
私が考えることができる少なくとも 1 つのことは次のとおりです:
相互排除のコストを削減します
シナリオがあります: DateFormat のパフォーマンスを向上させるために、通常は ThreadLocal と組み合わせられます。
怪我咯2017-04-18 10:39:44
一部の設計はパフォーマンスだけを目的としたものではない場合があります。Java は設計パターンに最も注意を払っており、単一責任は設計パターンの最も重要な原則の 1 つであることを知っておく必要があります。
一方、Maps を直接使用するよりも、ThreadLocal で Map のセットを直接実装した方が早いのではありませんか? ただし、これは明らかに単一責任に違反し、メンテナンスのコストが高くなります。
迷茫2017-04-18 10:39:44
ThreadLoad が Map<Thread, Object> を基礎となるデータ構造として直接使用する場合、多数のスレッドが ThreadLocal を使用すると、まず、スレッドのライフサイクルに伴い、基礎となる Map の追加および追加が必要になります。エンティティを削除すると、パフォーマンスのボトルネックが発生しやすくなります。