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.
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.
Selon la conception,
ThreadLocal
devrait exister en fonction de l'existence deThread
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
dansThreadLocal
selon votre conception, alors cemap
doit être destatic
(ou une variable membre dans unThreadLocal
singleton), ce qui poserait de sérieux problèmes dans la conception . , celamap
sera très difficile à gérer :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 :
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.