1. 程式人生 > >【Java多執行緒】ThreadLocal

【Java多執行緒】ThreadLocal

Synchronized是為了讓多執行緒進行資料共享,而ThreadLocal為了讓多執行緒進行資料隔離。

ThreadLocal為變數在每個執行緒中都建立了一個副本,那麼每個執行緒可以訪問自己內部的副本變數。
個人理解:同一個變數,每個執行緒都複製一份放到自己家裡,當需要對這個變數進行操作的時候就操作自己家的變數。每個執行緒都操作自己家的,所以互不影響。

public class ConnThreadLocal {
    public static ThreadLocal<String> th = new ThreadLocal<String>();
    public
void setTh(String value){ th.set(value); } public void getTh() { System.out.println(Thread.currentThread().getName()+":"+this.th.get()); } public static void main(String[] args) throws InterruptedException{ final ConnThreadLocal ct = new ConnThreadLocal(); Thread t1 = new
Thread(new Runnable() { @Override public void run() { ct.setTh("張三"); ct.getTh(); } },"t1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { ct.setTh("李四"
); ct.getTh(); } },"t2"); t1.start(); t2.start(); } }

執行結果:
這裡寫圖片描述
本例中,兩個執行緒都對ct物件進行set操作,但結果互不影響,就是因為ConnThreadLocal 類中th 是ThreadLocal類的物件,兩個執行緒的資料是隔離的,所以會輸出各自的結果,互不干擾。

相關推薦

Java執行ThreadLocal

Synchronized是為了讓多執行緒進行資料共享,而ThreadLocal為了讓多執行緒進行資料隔離。 ThreadLocal為變數在每個執行緒中都建立了一個副本,那麼每個執行緒可以訪問自己內部

Java執行執行狀態、執行池狀態

執行緒狀態:     執行緒共包括以下5種狀態。1. 新建狀態(New)  執行緒物件被建立後,就進入了新建狀態。例如,Thread thread = new Thread()。2. 就緒狀態(Runnable)  也被稱為“可執行狀態”。執行緒物件被建立後,

Java執行ReentrantReadWriteLock

概述   ReentrantReadWriteLock是Lock的另一種實現方式,ReentrantLock是一個排他鎖,同一時間只允許一個執行緒訪問,而ReentrantReadWriteLock允許多個讀執行緒同時訪問,但不允許寫執行緒和讀執行緒、寫執行緒和寫執行緒同時訪問。相對於排他鎖,提高了併發性。

JAVA執行如何解決一個生產者與消費者問題

                             如何解決一個生產者與消費者問題 生產者與消費者問題是多執行緒同步的一個經典問題。生產者和消費者同時使用一塊緩衝區,生產者生產商品放入緩衝區,消費者從緩衝區中取出商品。我們需要保證的是,當緩衝區滿時,生產者不可生產商品

輸出三角形 Java 執行

題目: 利用多執行緒輸出兩個三角形,要求控制兩個執行緒的發生,判斷第一個執行緒是否結束。 並且在第一個執行緒沒結束時,使用 sleep 方法或者 join 方法。 1、sleep 方法。 public class Main { public static

各視窗共同賣票 Java 執行

現實中也存在這樣的情況: 模擬一個火車站的售票系統,假如當日從A地發往B地的火車票只有10張,且允許所有視窗賣這10張票,每一個視窗也相當於一個執行緒。 1、Runnable介面實現 public class Main { public static void

各視窗單獨賣票 Java 執行

多視窗賣票,需求如下: 假設一個影院有三個售票口,分別用於向兒童、成人和老人售票。 影院為每個視窗放有10張電影票,分別是兒童票、成人票和老人票。 三個視窗需要同時賣票, 而現在只有一個售票員,這個售票員就相當於一個CPU,三個視窗就相當於三個執行緒。 1 通過擴充套件T

java執行守護執行執行停止、volatile的深入瞭解

文章目錄 執行緒的優雅停止 守護執行緒 volatile關鍵字 執行緒的優雅停止       在多執行緒的操作之中如果要啟動多執

Java執行執行池的工作原理詳解(下)

接著上篇文章,我接下來繼續介紹執行緒池的工作原理,如果你還沒有看上篇,我建議最好瀏覽一下:執行緒池的工作原理詳解(上) Executors 工具類 1.定義 Executors是java執行緒池的工廠類,通過它可以快速初始化一個符合業務需求的執行緒池。

java執行執行常用操作方法總結

文章目錄 執行緒的命名與獲取 執行緒休眠 執行緒中斷 執行緒強制執行 執行緒禮讓 執行緒優先順序 多執行緒的主要操作方法都在Thread類中定義了。 執行緒的

Java執行Executor框架的詳解

在Java中,使用執行緒來非同步執行任務。Java執行緒的建立與銷燬需要一定的開銷,如果我們為每一個任務建立一個新執行緒來執行,這些執行緒的建立與銷燬將消耗大量的計算資源。同時,為每一個任務建立一個新執行緒來執行,這種策略可能會使處於高負荷狀態的應用最終崩潰。 Java執行

Java執行共享變數&同步-非同步容器&執行區域性變數

共享變數 (Volatile Atomic) volatile:當多個執行緒訪問一個成員變數的時候,需要這個變數在多個執行緒中可見。 Atomic:Atomic方法對該變數的操作是原子性操作,顆粒度是到對這個變數的一次操作。 private stati

Java執行synchronized-鎖重入

1.什麼是鎖重入? 在使用synchronized時,當一個執行緒得到一個物件鎖後,再次請求此物件鎖時是可以再次得到該物件的鎖的。這也證明在一個synchronizes方法/塊的內部呼叫本類的其他synchronized方法/塊時,也是 永遠可以得到鎖的。

Java執行單例模式與執行

單例模式大家都不陌生,即讓一個類只有一個例項。 單例模式分為懶漢式和餓漢式。 懶漢式☞方法呼叫時再例項化物件,什麼時候用什麼時候例項化,比較懶。 餓漢式☞方法呼叫前物件就已經建立好了,比較有捉急。 本文著重描述懶漢式與多執行緒的內容。 1.餓漢式 public

Java執行synchronized與執行安全

介紹 修飾方法:一個執行緒去呼叫一個加synchronized的方法的時候,會獲得該物件的 物件鎖。 修飾靜態方法:一個執行緒去呼叫一個既加static,又加synchronized的方法的時候,會獲得該物件的 類鎖。 修飾程式碼塊: ①加物件鎖:

java執行執行的建立三種方式--筆記

申明:執行緒的概念以及程序的相關概念,可以參考網路上其他資料,這裡只討論多執行緒是怎麼實現。 一、多執行緒的簡單理解 明白什麼是多執行緒,小生通俗一點的理解為:在一個程式裡,我想同時讓這個程式完成多個任務。 比如:讓主函式 main 在列印1~100之間的所有整

Java執行執行同步機制

執行緒同步是為了確保執行緒安全,所謂執行緒安全指的是多個執行緒對同一資源進行訪問時,有可能產生資料不一致問題,導致執行緒訪問的資源並不是安全的。如果多執行緒程式執行結果和單執行緒執行的結果是一樣的,且相

JAVA執行問題之死鎖

  一、死鎖是什麼? 舉個例子:兩個人一起吃飯,每個人都拿了一隻筷子,雙方都在等待對方將筷子讓給自己,結果兩個人都吃不了飯。這種情況和計算機中的死鎖情況很相似。 假設有兩個執行緒,互相等待對方釋放佔有的鎖,但是釋放鎖的條件又不可能形成,這時候死鎖就形成了。 還是買票的問題,有的時候時會發生死

Java執行併發總結Thread類的常用方法(join、yield等)---執行的基礎操作篇

 啟動(start)   最基本的操作,呼叫Runnable中的run方法,無返回值。 new Thread(new Test()).start(); 休眠(sleep)  使當前執行緒休眠一段時間,預設為毫秒級,最高可以精確到納秒,呼叫的方法為slee

Java執行程式設計核心技術第一章(執行技能suspend,resume,yield)

1.8 暫停執行緒      在多執行緒中,suspend是暫停執行緒,resume是恢復執行緒的執行.  1.8.1suspend方法和resume方法的使用 public class MyThread extends Thread { private lon