摘要:將當前線程局部變量的值刪除,目的是為了減少內存的占用,該方法是新增的方法。返回該線程局部變量的初始值,該方法是一個的方法,顯然是為了讓子類覆蓋而設計的。
Threadlocal
ThreadLocal提高一個線程的局部變量,訪問某個線程擁有自己局部變量。
當使用ThreadLocal維護變量時,ThreadLocal為每個使用該變量的線程提供獨立的變量副本,所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應的副本。
ThreadLocal的接口方法
ThreadLocal類接口很簡單,只有4個方法:
? void set(Object value)設置當前線程的線程局部變量的值。
? public Object get()該方法返回當前線程所對應的線程局部變量。
? public void remove()將當前線程局部變量的值刪除,目的是為了減少內存的占用,該方法是JDK 5.0新增的方法。需要指出的是,當線程結束后,對應該線程的局部變量將自動被垃圾回收,所以顯式調用該方法清除線程的局部變量并不是必須的操作,但它可以加快內存回收的速度。
? protected Object initialValue()返回該線程局部變量的初始值,該方法是一個protected的方法,顯然是為了讓子類覆蓋而設計的。這個方法是一個延遲調用方法,在線程第1次調用get()或set(Object)時才執行,并且僅執行1次。ThreadLocal中的缺省實現直接返回一個null。
public class LocalDemo { // 生成序列號共享變量 public static Integer count = 0; public static ThreadLocalthreadLocal = new ThreadLocal () { protected Integer initialValue() { return 0; }; }; public Integer getNum() { int count = threadLocal.get() + 1; threadLocal.set(count); return count; } }
public class LocalThread extends Thread{ private LocalDemo localDemo; public LocalThread(LocalDemo localDemo) { this.localDemo = localDemo; } @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName() + "---" + "i---" + i + "--num:" + localDemo.getNum()); } } }
@RequestMapping("test-local") public void testLocal() { LocalDemo localDemo = new LocalDemo(); LocalThread lt1 = new LocalThread(localDemo); LocalThread lt2 = new LocalThread(localDemo); LocalThread lt3 = new LocalThread(localDemo); lt1.start(); lt2.start(); lt3.start(); }結果
Thread-18---i---0--num:1
Thread-18---i---1--num:2
Thread-18---i---2--num:3
Thread-17---i---0--num:1
Thread-17---i---1--num:2
Thread-17---i---2--num:3
Thread-19---i---0--num:1
Thread-19---i---1--num:2
Thread-19---i---2--num:3
ThreadLoca通過map集合
Map.put(“當前線程”,值);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74549.html
摘要:方法,刪除當前線程綁定的這個副本數字,這個值是的值,普通的是使用鏈表來處理沖突的,但是是使用線性探測法來處理沖突的,就是每次增加的步長,根據參考資料所說,選擇這個數字是為了讓沖突概率最小。 showImg(https://segmentfault.com/img/remote/1460000019828633); 老套路,先列舉下關于ThreadLocal常見的疑問,希望可以通過這篇學...
摘要:基本在項目開發中基本不會用到但是面試官是比較喜歡問這類問題的所以還是有必要了解一下該類的功能與原理的是什么是一個將在多線程中為每一個線程創建單獨的變量副本的類當使用來維護變量時會為每個線程創建單獨的變量副本避免因多線程操作共享變量而導致的數 ThreadLocal基本在項目開發中基本不會用到, 但是面試官是比較喜歡問這類問題的;所以還是有必要了解一下該類的功能與原理的. Thread...
摘要:并發設計模式一模式的使用表示線程本地存儲模式。為不同的任務創建不同的線程池,這樣能夠有效的避免死鎖問題。兩階段終止,即將線程的結束分為了兩個階段,第一個階段是一個線程向另一個線程發送終止指令,第二個階段是線程響應終止指令。 Java 并發設計模式 一、Thread Local Storage 模式 1. ThreadLocal 的使用 Thread Local Storage 表示線程...
摘要:并沒有提供語言級的線程局部變量,而是在類庫里提供了線程局部變量的功能,也就是這次的主角類。 Yuicon 轉載請注明原創出處,謝謝! 序 在多線程環境下,訪問非線程安全的變量時必須進行線程同步,例如使用synchronized方式訪問HashMap實例。但是同步訪問會降低并發性,影響系統性能。這時候就可以用空間換時間,如果我們給每個線程都分配一個獨立的變量,就可以用非同步的方式使用非...
摘要:概念類用來存放線程的局部變量,每個線程都有自己的局部變量彼此之間不共享。返回當前線程的局部變量初始值。工作流程的時候我們可以看見是從中獲取的,也就是說這些局部變量真正存儲在中的時候從中獲取到了,然后再從中獲取。和都用于解決多線程并發訪問。 【概念 ThreadLocal類用來存放線程的局部變量,每個線程都有自己的局部變量彼此之間不共享。TheadLocal主要有以下三個方法: pub...
摘要:容易導致內存泄漏。如果我們的強引用不存在的話,那么就會被回收,也就是會出現我們沒被回收,被回收,導致永遠存在,出現內存泄漏。緩存行和一次定位,不會有沖突由于使用數組,不會出現回收,沒被回收的尷尬局面,所以避免了內存泄漏。 1 背景 某一天在某一個群里面的某個群友突然提出了一個問題:threadlocal的key是虛引用,那么在threadlocal.get()的時候,發生GC之后,ke...
閱讀 1689·2021-10-13 09:39
閱讀 3163·2021-10-12 10:11
閱讀 557·2021-09-28 09:36
閱讀 2641·2019-08-30 15:55
閱讀 1391·2019-08-30 13:04
閱讀 634·2019-08-29 17:08
閱讀 1913·2019-08-29 14:14
閱讀 3407·2019-08-28 18:23