Maison  >  Questions et réponses  >  le corps du texte

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

阿神阿神2716 Il y a quelques jours410

répondre à tous(4)je répondrai

  • 大家讲道理

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

    Selon la conception, ThreadLocal devrait exister en fonction de l'existence de Thread Chaque fil peut avoir un espace de stockage, donc je suis tout à fait d'accord avec votre deuxième point, je ne suis pas tout à fait d'accord. compréhensible.
    Si vous mettez map dans ThreadLocal selon votre conception, alors ce map doit être de static (ou une variable membre dans un ThreadLocal singleton), ce qui poserait de sérieux problèmes dans la conception . , cela map sera très difficile à gérer :

    1. 试想有没有线程安全问题?
    2. 线程销毁后怎么处理,不做处理这个map将会越来越大?
    

    Le design a un ensemble de méthodes, et même une philosophie, qu'il faut savourer avec attention.

    répondre
    0
  • 黄舟

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

    Au moins la seule chose à laquelle je peux penser est :

    Réduire le coût de l'exclusion mutuelle

    Il existe un scénario : afin d'améliorer les performances de DateFormat, il est généralement combiné avec ThreadLocal.

    répondre
    0
  • 怪我咯

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

    Certaines conceptions ne sont parfois pas uniquement destinées aux performances. Vous devez savoir que Java accorde la plus grande attention aux modèles de conception et que la responsabilité unique est l'un des principes les plus importants des modèles de conception.
    D'un autre côté, ne serait-il pas plus rapide d'implémenter directement une Map dans ThreadLocal que d'utiliser Map directement. Cependant, cela viole évidemment la responsabilité unique et rend la maintenance plus coûteuse ?

    répondre
    0
  • 迷茫

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

    Si ThreadLoad utilise directement Map<Thread, Object> comme structure de données sous-jacente, lorsqu'un grand nombre de threads utilisent ThreadLocal, les performances d'accès à la carte diminueront en même temps que le cycle de vie du thread, la carte sous-jacente devra d'abord diminuer. être ajoutée et supprimée fréquemment, ce qui peut facilement entraîner des goulots d'étranglement dans les performances.

    répondre
    0
  • Annulerrépondre