【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