假如語文老師有一本書,但是班上有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類就是給我們提供了...