java - 为什么ThreadLocal 选择在线程中使用成员变量,而不是维护一个以线程为Key,值为value的集合?
阿神
阿神 2017-04-18 10:37:44
0
4
437
阿神
阿神

闭关修行中......

全員に返信(4)
大家讲道理

設計上、ThreadLocal应该依附于Thread的存在而存在,每一个线程都可以有一份空间来存储,所以你说的第2点我非常赞同,至于第1点,我不太看得懂。
如果按照你的设计,将map放在ThreadLocal,那么这个map得是static的(或者ThreadLocal单例中的成员变量),这样在设计上存在严重问题,这个mapの管理は非常に困難になります:

リーリー

デザインには一連の手法、さらには関連する哲学があり、それらを注意深く味わう必要があります。

いいねを押す +0
黄舟

私が考えることができる少なくとも 1 つのことは次のとおりです:

相互排除のコストを削減します

シナリオがあります: DateFormat のパフォーマンスを向上させるために、通常は ThreadLocal と組み合わせられます。

いいねを押す +0
刘奇

一部の設計はパフォーマンスだけを目的としたものではない場合があります。Java は設計パターンに最も注意を払っており、単一責任は設計パターンの最も重要な原則の 1 つであることを知っておく必要があります。
一方、Maps を直接使用するよりも、ThreadLocal で Map のセットを直接実装した方が早いのではありませんか? ただし、これは明らかに単一責任に違反し、メンテナンスのコストが高くなります。

いいねを押す +0
迷茫

ThreadLoad が Map<Thread, Object> を基礎となるデータ構造として直接使用する場合、多数のスレッドが ThreadLocal を使用すると、まず、スレッドのライフサイクルに伴い、基礎となる Map の追加および追加が必要になります。エンティティを削除すると、パフォーマンスのボトルネックが発生しやすくなります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!