您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么實現java線程封閉”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么實現java線程封閉”吧!
多線程訪問共享可變數據時,并不是所有的時候,都要用到共享數據, 所以線程封閉的概念就提了出來。 所謂線程封閉, 就是指數據都封閉在各自的線程之中, 不需要不需要同步。線程封閉的具體的實現主要有ThreadLocal和局部變量
ThreadLocal是Java里一種特殊的變量,一個線程級別的變量,每個線程都有一個自己獨立的ThreadLocal變量。它的競爭條件被徹底消除, 在并發模式下是絕對安全的。 用法:ThreadLocal<T> var = new ThreadLocal<T>();
會自動在每個線程上創建一個T的副本, 副本之間彼此獨立,互不影響。 可以用ThreadLocal存儲一些參數,以便在線程中多個方法中使用, 用來代替方法傳參的的做法
代碼示例:
/** 線程封閉示例 */ public class Demo6 { /** threadLocal變量,每個線程都有一個副本,互不干擾 */ public static ThreadLocal<String> value = new ThreadLocal<>(); /** * threadlocal測試 * * @throws Exception */ public void threadLocalTest() throws Exception { // threadlocal線程封閉示例 value.set("這是主線程設置的123"); // 主線程設置值 String v = value.get(); System.out.println("線程1執行之前,主線程取到的值:" + v); new Thread( new Runnable() { @Override public void run() { String v = value.get(); System.out.println("線程1取到的值:" + v); // 設置 threadLocal value.set("這是線程1設置的456"); v = value.get(); System.out.println("重新設置之后,線程1取到的值:" + v); System.out.println("線程1執行結束"); } }) .start(); Thread.sleep(5000L); // 等待所有線程執行結束 v = value.get(); System.out.println("線程1執行之后,主線程取到的值:" + v); } public static void main(String[] args) throws Exception { new Demo6().threadLocalTest(); } }
輸出結果:
線程1執行之前,主線程取到的值:這是主線程設置的123 線程1取到的值:null 重新設置之后,線程1取到的值:這是線程1設置的456 線程1執行結束 線程1執行之后,主線程取到的值:這是主線程設置的123
局部變量的固有屬性之一就是封閉在線程中 它們位于執行線程的棧中, 其他線程無法訪問這個棧
到此,相信大家對“怎么實現java線程封閉”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。