ThreadLocal極其應用

2021-10-08 13:29:26 字數 961 閱讀 1808

假如語文老師有一本書,但是班上有30名學生,老師將這本書送給學生們去閱讀,30名學生都想閱讀這本書。

為保證每個學生都能閱讀到書籍,那麼基本可以有兩種方案,一是按照某種排序(例如姓名首字母排序),讓每個學生依次閱讀。

二是讓30名學生同時爭搶,誰搶到誰就去閱讀,讀完放回原處,剩下的29名學生再次爭搶。

顯然第一種方案,基本表現為序列閱讀,時間成本較大,第二種方案為多個學生爭搶,容易發生安全問題(學生發生衝突或者書籍在爭搶過程中被毀壞)。

為了解決這兩個問題,那麼有沒有更加好的方案呢?當然有,老師可以將書籍影印30本,每個學生都發一本,這樣既大大提高了閱讀效率,節約了閱讀時間,還能保證每個學生都能有自己的書籍,這樣就不會發生爭搶,避免了安全問題。

假如我們有乙個需求,那就是在多執行緒環境下,去格式化時間為指定格式yyyy-mm-dd hh:mm:ss,假設一開始只有兩個執行緒需要這麼做,**如下:

public class test 

private string date(int seconds)

}

於是我們聯想到,1000個執行緒來共享乙個******dateformat物件,這樣******dateformat物件只需要建立一次即可,**如下:

public class test2 

// 關閉執行緒池,此種關閉方式不再接受新的任務提交,等待現有佇列中的任務全部執行完畢之後關閉

executorservice.shutdown();

}private string date(int seconds)

}

上述**我們使用到了固定執行緒數的執行緒池來執行時間格式化任務,我們來執行一下,看看結果:

ThreadLocal理解和應用

本篇部落格將為大家介紹一下threadlocal。從用途 使用方法 原理 及常見問題四個方面來介紹。threadlocal用途可以理解成乙個 儲物間 這個 儲物間 當中擁有大量的 儲物櫃 每個 儲物櫃 實際上就是每個執行緒,當中存放的是thread執行緒中引數,針對於threadlocal的set方...

ThreadLocal 應用場景

1.threadlocal 是乙個儲存物件,它可分為static全域性變數,區域性變數,下面介紹的是全域性變數。當乙個多執行緒讀寫時就會出現併發的現象,也就當物件共享時會出現的場景。在網上檢視了一下別的的介紹。public class threadlocaltest public static st...

ThreadLocal類以及應用技巧

上一節總結了一下,執行緒範圍內的資料共享問題,即定義乙個map,將當前執行緒名稱和執行緒中的資料以鍵值對的形式存到map中,然後在當前執行緒中使用資料的時候就可以根據當前執行緒名稱從map中拿到當前執行緒中的資料,這樣就可以做到不同執行緒之間資料互不干擾。其實threadlocal類就是給我們提供了...