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

闭关修行中......

répondre à tous(4)
大家讲道理

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.

黄舟

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.

刘奇

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 ?

迷茫

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal