ホームページ  >  に質問  >  本文

java - 为什么ThreadLocal 选择在线程中使用成员变量,而不是维护一个以线程为Key,值为value的集合?

阿神阿神2765日前438

全員に返信(4)返信します

  • 大家讲道理

    大家讲道理2017-04-18 10:39:44

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

    リーリー

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

    返事
    0
  • 黄舟

    黄舟2017-04-18 10:39:44

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

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

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

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:39:44

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

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:39:44

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

    返事
    0
  • キャンセル返事