1. 程式人生 > >Threadlocal實現執行緒封閉

Threadlocal實現執行緒封閉

ThreadLocal可以為全域性狀態變數,在當前執行執行緒建立一個副本,這個副本只允許當前執行緒訪問,其他執行緒無法訪問,實現執行緒封閉。通過介面方法set在當前執行執行緒的副本上設定值,通過get獲取設定的值,第一次呼叫get時候會執行一個初始化方法initialValue初始化副本值。

package cn.concurrent.t1;

public class Th1 {
	private static ThreadLocal<String> ths=new ThreadLocal<String>(){
		public String initialValue(){
			return "ABC";
		}
	};
	
	public static String getStr(){
		return ths.get();
	}
	
	public static void main(String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				ths.set("EFG");
				System.out.println(getStr());
			}
		}).start();
		System.out.println(getStr());
	}
}

輸出:

ABC
EFG

ThreadLocal   使得main執行緒和單獨啟動的一個執行緒都維護了自己的副本變數的值。

相關推薦

Threadlocal實現執行封閉

ThreadLocal可以為全域性狀態變數,在當前執行執行緒建立一個副本,這個副本只允許當前執行緒訪問,其他執行緒無法訪問,實現執行緒封閉。通過介面方法set在當前執行執行緒的副本上設定值,通過get獲取設定的值,第一次呼叫get時候會執行一個初始化方法initialVal

ThreadLocal實現執行安全

Spring通過各種模板類降低了開發者使用各種資料持久技術的難度。這些模板類都是執行緒安全的,也就是說,多個DAO可以複用同一個模板例項而不會發生衝突。我們使用模板類訪問底層資料,根據持久化技術的不同,模板類需要繫結資料連線或會話的資源。但這些資源本身是非執行緒安全的,也就是說它們不能在同一時刻被多

ThreadLocal實現執行安全的經典例子

public class SequenceNumber { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub

ThreadLocal實現執行範圍的共享變數

這裡先說下ThreadLocal不是一個執行緒的本地實現版本,不是一個Thread,它是thread local variable(執行緒區域性變數);用於實現執行緒內的資料共享,即對於相同的程式程

ThreadLocal實現執行範圍內共享變數

 1.多執行緒範圍內訪問共享物件和資料的方式。  1).如果每個執行緒要執行的程式碼一樣,可以使用同一個Runnable物件,這個Runnable物件中有共享資料,例如:買票系統。  2).每一個執行緒要執行的程式碼不一樣,這樣就需要使用多個Runnable物件了。有以下幾

併發程式設計---執行封閉(棧封閉ThreadLocal

    在多執行緒環境中,如果多個執行緒同時訪問一個共同的可變變數,我們稱這個變數為共享變數,如果不做任何措施,很可能會引起執行緒安全問題。那麼如何解決這個執行緒安全問題是我們要考慮的。我們通常的做法是使用同步,但是我們有沒有想過執行緒的安全問題是因為共享,那

java基礎多執行(4)—執行可見性volatile 執行封閉threadlocal CAS操作

一。執行緒的可見性volatile(不是太常用,因為他只能解決執行緒可見和阻止指令排序,並不能解決多執行緒的併發問題) volatile:(1)保證變數的修改讓所有執行緒可見 (2)阻止指令排序 這個程式有3個結果,0,42,沒有進入迴圈直接結束

執行(三) 實現執行範圍內模組之間共享資料及執行間資料獨立(ThreadLocal

       ThreadLocal為解決多執行緒程式的併發問題提供了一種新的思路。JDK 1.2的版本中就提供java.lang.ThreadLocal,使用這個工具類可以很簡潔地編寫出優美的多執行緒程式,ThreadLocal並不是一個Thread,而是Thread的區域

java執行封閉 ThreadLocal的使用

    當訪問共享的可變資料時,通常需要使用同步,一種避免使用同步的方式就是不共享資料。Java提供了ThreadLocal類來方便開發者們實現執行緒封閉,在這個ThreadLocal類中的某個值與儲存值的物件關聯起來。ThreadlLocal提供了get與set方法,這些方

ThreadLocal父子執行傳遞實現方案

前言 介紹InheritableThreadLocal之前,假設對 ThreadLocal 已經有了一定的理解,比如基本概念,原理,如果沒有,可以參考:ThreadLocal原始碼分析解密.在講解之前我們先列舉有關ThreadLocal的幾個關鍵點 每一個Thread執行緒都有屬於自己的ThreadL

Java併發程式設計--執行封閉(Ad-hoc、棧、ThreadLocal

執行緒封閉(Thread Confinement):僅在單執行緒內訪問資料,不需要同步。 常見應用是:JDBC(Java Database Connectivity)的Connection物件。 1.Ad-hoc執行緒封閉  指維護執行緒封閉性的職責完全由程式實現來承擔。A

執行封閉-ThreadLocal類的學習筆記

        執行緒封閉是指在多執行緒環境對資源的訪問過程中,為了保證執行緒安全性,將共享資源拷貝為一個副本來單獨使用,而不改變原資源。這樣的做法保證了程式的效能,因為不再需要限制同一時間內只有一個執行緒訪問資源。          ThreadLocal是執行緒封閉的一個

Java高效能程式設計實戰 --- 執行封閉ThreadLocal

1 執行緒封閉 多執行緒訪問共享可變資料時,涉及到執行緒間資料同步的問題。並不是所有時候,都要用到 共享資料,所以執行緒封閉概念就

執行封閉之棧封閉ThreadLocal

執行緒封閉   在多執行緒的環境中,我們經常使用鎖來保證執行緒的安全,但是對於每個執行緒都要用的資源使用鎖的話那麼程式執行的效率就會受到影響,這個時候可以把這些資源變成執行緒封閉的形式。  1、棧封閉   所謂的棧封閉其實就是使用區域性變數存放資源,我們知道區域性變數在記憶體中是存放在虛擬機器棧中,而棧

Qt中實現執行安全的單例模式

之前專案中用到單例模式,用的是執行緒不安全的,這次專案用到了多執行緒,所以想到實現一個執行緒安全的單例模式。經過查詢資料,發現Qt本身有自己的執行緒安全單例模式實現方式。 Q_GLOBAL_STATIC巨集 使用方法:MonitorWindow.h #ifndef MONITORW

設計模式之單例模式【內附物件例項化幾種方式、實現執行安全幾種方式】

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

Java利用wait和notify實現執行間通訊

       Java的Object類提供了wait和notify方法用於實現執行緒間通訊(因為所有的java類都繼承了Object類,所以所有的java類都有這兩個方法)。這兩個方法在Object類中籤名如下: pu

wait和notify方法實現執行間的通訊

    使用wait和notify方法實現執行緒間的通訊需要注意以下兩點: wait和notify必須配合synchronized去使用。 wait可以釋放鎖,notify不釋放鎖。 1.wait和notify的簡單應用   &nbs

AQS 獨佔式鎖如何實現執行同步

獨佔式鎖為了實現執行緒同步,主要是綜合使用了三種手段。 雙向連結串列構成的佇列 CAS原子操作 阻塞與釋放(ParkSupport的park( )和unpark( )方法) 執行緒獲得鎖的流程如下: 先請求獲得鎖, 如果成功了就沒什麼說得,

C#中使用事件機制實現執行間的通訊

在圖形介面中的運用程式中,通常是主執行緒負責UI人機互動,而將需要迴圈執行和耗資源的邏輯程式碼和複雜的業務實現以及資料互動放到單獨一個執行緒裡執行。這樣可以保證主執行緒UI可以正常進行人機互動。 而執行緒之間的資料互動,就涉及了執行緒通訊。這裡將通過一個給MCU升級韌體程式的IAP(在應用