ThreadLocal的原理和使用場景

2022-09-15 19:33:14 字數 659 閱讀 8729

每乙個thread物件均含有乙個threadlocalmap型別的成員變數threadlocals,它儲存本執行緒中所有threadlocal物件及其對應的值

threadlocalmap是由乙個個entry物件構成,entry繼承自weakreference,乙個entry是由threadlocal物件和object(這裡是程式設計師存入的值)構成。由此可見entry的key是乙個threadlocal物件,並且是乙個弱引用(防止記憶體洩漏)。當沒有key的強引用後,該key就會被垃圾**器**。

當執行set方法時,threadlocal首先會獲取當前執行緒物件,然後獲取當前執行緒的threadlocalmap物件。再以當前threadlocal物件為key,set的值為value,儲存到threadlocalmap物件中。

get方法執行過程類似。threadlocal首先會獲取當前執行緒物件,然後獲取當前執行緒的threadlocalmap物件。再以當前threadlocal物件為key,獲取當前的value。

使用場景:

spring 框架在事務開始時會給當前執行緒繫結乙個jdbc connection,在整個事務過程都是使用該執行緒繫結的connection來執行資料庫操作,實現了事務的隔離性。spring框架裡面就是用的threadlocal來實現這種隔離

ThreadLocal的原理和使用

前幾天有一篇文章分享了 dateformat類在多執行緒情況下不安全的問題,文章中也提到了使用threadlocal來解決的這種辦法,今天就來給大家介紹一下threadlocal。由於 dateformat類執行緒不安全,所以我們不能用public static修飾乙個 dateformat變數來共...

ThreadLocal的作用和原理

threadlocal是用來建立當前執行緒的區域性變數的類,建立的變數只能被當前執行緒訪問和修改 原理 set方法的原理 1.首先獲取當前執行緒物件 2.利用當前執行緒獲取threadlocalmap物件 3.如果threadlocalmap物件不為空,則設定值,否則建立這個map物件並設定值 由此...

ThreadLocal的作用和實現原理

threadlocal是乙個執行緒內部的資料儲存類,通過它可以在指定的執行緒中儲存資料,資料儲存以後,只有在指定的執行緒中可以獲取到儲存的資料,對於其他執行緒來說則無法取到資料。threadlocal的主要作用 輕鬆實現一些看起來很複雜的功能,適合以下一些應用場景。某些資料是以執行緒為作用域並且不同...