ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому
ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€

🧠 ThreadLocal β€” скрытая ΡƒΠ³Ρ€ΠΎΠ·Π° ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти

🧠 ThreadLocal β€” скрытая ΡƒΠ³Ρ€ΠΎΠ·Π° ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ThreadLocal β€” ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, привязанныС ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. НапримСр, для SimpleDateFormat ΠΈΠ»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… запроса. Но с Π½ΠΈΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти, особСнно Π² thread pool'Π°Ρ…. πŸ“Œ ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ThreadLocal-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (Thread.threadLocals) ΠΆΠΈΠ²Ρ‘Ρ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅, сколько ΠΏΠΎΡ‚ΠΎΠΊ. А ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠ· ΠΏΡƒΠ»ΠΎΠ² ΠΆΠΈΠ²ΡƒΡ‚ Π΄ΠΎΠ»Π³ΠΎ. Если Ρ‚Ρ‹ Π·Π°Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ remove() β€” Π΄Π°Π½Π½Ρ‹Π΅ останутся Π² памяти навсСгда. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: private static final ThreadLocal<UserContext> context = ThreadLocal.withInitial(UserContext::new); public void handleRequest() { try { context.set(new UserContext("user123")); // Ρ€Π°Π±ΠΎΡ‚Π° с контСкстом } finally { context.remove(); // ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠž! } } ⚠️ Π§Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ Π±Π΅Π· remove()? - ΠŸΠΎΡ‚ΠΎΠΊ ΠΈΠ· ΠΏΡƒΠ»Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запрос, Π½ΠΎ UserContext останСтся Π²ΠΈΡΠ΅Ρ‚ΡŒ Π² ThreadLocalMap этого ΠΏΠΎΡ‚ΠΎΠΊΠ°. - Если UserContext содСрТит ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HttpSession, EntityManager ΠΈ Ρ‚.Π΄.) β€” вся эта Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ GC-ΡˆΠΈΡ‚ΡŒΡΡ. - И Ρ‚Π°ΠΊ накапливаСтся ΡƒΡ‚Π΅Ρ‡ΠΊΠ°. πŸ’‘ Π‘ΠΎΠ²Π΅Ρ‚Ρ‹: - ВсСгда Π²Ρ‹Π·Ρ‹Π²Π°ΠΉ remove() Π² finally. - Для Spring ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RequestScope ΠΈΠ»ΠΈ @ControllerAdvice вмСсто ThreadLocal. - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉ ΠΊΠΎΠ΄ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ссли ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ThreadLocal, особСнно Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ… ΠΈ интСрсСпторах. πŸ‘‰ @BookJava

561 просмотров

Канал Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€Π°

1Β 612 подписчиков Β· Наука

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

Π•Ρ‰Ρ‘ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ «Наука»

Π§ΠΈΡ‚Π°Ρ‚ΡŒ дальшС

Π”Π²Π° Ρ€Π°Π·Π° Π² нСдСлю свСТиС посты этого ΠΊΠ°Π½Π°Π»Π° β€” Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ Π² Π»ΠΈΡ‡Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ. Π‘Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ°Π½Π°Π»Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.