1. 程式人生 > >java執行緒之InheritableThreadLocal

java執行緒之InheritableThreadLocal

ThreadLocal和InheritableThreadLocal區別,可以用程式碼測試一下:

  1. package com.lang;  
  2. import junit.framework.TestCase;  
  3. import static java.lang.System.out;  
  4. public class TestInheritableThreadLocal extends TestCase {  
  5.     public void testThreadLocal() {  
  6.         final ThreadLocal<String> local = new
     ThreadLocal<String>();  
  7.         work(local);  
  8.     }  
  9.     public void testInheritableThreadLocal() {  
  10.         final ThreadLocal<String> local = new InheritableThreadLocal<String>();  
  11.         work(local);  
  12.     }  
  13.     private void work(final ThreadLocal<String> local) {  
  14.         local.set("a");  
  15.         out.println(Thread.currentThread() + "," + local.get());  
  16.         Thread t = new Thread(new Runnable() {  
  17.             @Override  
  18.             public void run() {  
  19.                 out.println(Thread.currentThread() + "," + local.get());  
  20.                 local.set("b"
    );  
  21.                 out.println(Thread.currentThread() + "," + local.get());  
  22.             }  
  23.         });  
  24.         t.start();  
  25.         try {  
  26.             t.join();  
  27.         } catch (InterruptedException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         out.println(Thread.currentThread() + "," + local.get());  
  31.     }  
  32. }  


執行testThreadLocal,輸出:

  1. Thread[main,5,main],a  
  2. Thread[Thread-0,5,main],null  
  3. Thread[Thread-0,5,main],b  
  4. Thread[main,5,main],a  


執行testInheritableThreadLocal,輸出:

  1. Thread[main,5,main],a  
  2. Thread[Thread-0,5,main],a  
  3. Thread[Thread-0,5,main],b  
  4. Thread[main,5,main],a  


比較後,看到ThreadLocal裡的值,子執行緒裡不能獲得;InheritableThreadLocal裡的值,子執行緒可以獲得。

相關推薦

java執行InheritableThreadLocal

ThreadLocal和InheritableThreadLocal區別,可以用程式碼測試一下: package com.lang;   import junit.framework.TestCase;   import static java.lang

java 執行執行狀態

java執行緒狀態 1. 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。 2. 執行(RUNNABLE): Java執行緒中將就緒(ready)和執行中(running)兩種狀態籠統的稱為“執行”。 執行緒物件建立後,其他執行緒(比如main執行緒)呼叫了該物件

Java執行semaphore和Exchanger

Semaphore是Java執行緒的一個計數訊號量。我們可用於多執行緒的併發訪問控制。 就像我們常見的執行緒池,資料庫連線池就可以使用Semaphore進行邏輯的實現。Semaphore中我們就介紹兩個最常用的兩個方法。 acquire() 從Semaphore獲取許可,如果計數不小於0

Java執行非同步回撥(Callback)

●介紹      有時候執行一個任務需要很長時間,單執行緒下執行緒會處於阻塞狀態。這個時候我們會考慮一種非阻塞的處理模式。非阻塞任務在任何程式語言裡都必不可少,Java也不例外。多執行緒就是一個很好的解決辦法。     

java執行Latch設計模式見解

CountDownLatch :(個人理解)使用閥門值,直到閥門值為0之前,一直阻塞執行緒。實則使用物件鎖,不釋放物件鎖,一直佔用資源,(這裡是一個缺點)。閥門值為0時,呼叫釋放物件鎖的方法,釋放資源。應用的場景,我覺得是需要一些執行緒先完成的前提下,再使用其他執行緒。也就是我就是要一些重要的執行緒

Java執行Synchronized同步————Java學習路(17)

前言——不進則退啊,部落格幾天沒寫,排名第一次下降了,得勤奮更新,不能偷懶。。 歡迎轉載,轉載請註明來處。 目錄 一.演示同步問題 此前,我們用的多執行緒都是較為簡單的例子,都沒有涉及到多個執行緒共享同一個物件或者資源的情況。倘若多執行緒共享資

Java執行訊號量

 計數訊號量用來控制同時訪問某個特定資源的運算元量,或者同時執行某個指定操作的數量。計數訊號量還可以用來實現某種資源池,或者對容器施加邊界。  Semaphore中管理者一組虛擬的許可,許可的數量可通過建構函式來指定。在互相操作時可以首先獲得許可(只要還有剩餘的許可),並在使用以後釋放許可。

Java執行閉鎖

 閉鎖是一種同步工具類,可以延遲執行緒的進度直到其到達終止狀態。閉鎖的作用相當於一扇門:在閉鎖到達結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能通過,當到達結束狀態時,這扇門會開啟並允許所有的執行緒通過。當閉鎖到達結束狀態後,將不會再改變狀態,因此這扇門將永遠保持開啟狀態。閉鎖可以用

java執行Executor框架與執行

執行緒雖然在web開發中用的不算特別多,但在特定的情況下還是能發揮重要重要作用的,因此即使用的少還是掌握下比較好;下面先回顧下比較執行緒的常規實現方法 1 繼承Thread類 2 實現runnable介面(使用較多) java5之後有了新的執行緒實現方式,java5可以使用

Java執行銀行存取款

銀行的存取款可以分為存款和取款: 當去存款的時候會先顯示賬戶資訊,然後將存進去的錢和賬戶原有的錢數相加,返回存款之後賬戶資訊; 當去取款的時候會先顯示賬戶資訊,然後將取錢數和賬戶裡面的錢相對比,如果取

Java執行執行池的使用

 在Java中進行非同步操作時,執行緒必不可少,但如果頻繁的建立、銷燬一個執行緒,這是很耗效能的,所以執行緒池就應運而生了,Java中主要有newFixedThreadPool、newCachedThreadPool、newSingleThreadExecuter及newSchedule

Java執行執行

 Executor框架可以將任務的提交與任務的執行策略解耦開來。就像許多對複雜過程的解耦操作那樣,這種論斷多少有些言過其實了。雖然Executor框架為定製和修改執行策略提供了相當大的靈活性,但並非所有的任務都能適用所有的執行策略。有些型別的任務需要明確的指定執行策略。

java執行wait(),notify(),notifyAll(),synchronized(obj){},join()

wait(),notify(),notifyAll(),synchronized wait()和notify()是java.lang.Object的物件方法,synchronized是java關鍵字;wait()和notify()必須配合synchronized

Java執行fork/join框架

fork/join框架是用多執行緒的方式實現分治法來解決問題。fork指的是將問題不斷地縮小規模,join是指根據子問題的計算結果,得出更高層次的結果。 fork/join框架的使用有一定的約束條件: 1. 除了fork()  和  join()方法外,執行緒不得使用

Java執行執行的五種狀態

執行緒的 5 中狀態 1. New 新建狀態 * 當程式使用 new 關鍵字建立了一個執行緒後,該執行緒就處於新建狀態,此時執行緒還未啟勱, * 當執行緒物件呼叫 start()方法時

JAVA 執行記憶體可見性

什麼是記憶體可見性 先介紹幾個概念: 共享變數: 如果一個變數在多個執行緒的工作記憶體中都存在副本,那麼這個變數就是這幾個執行緒的共享變數 可見性: 一個執行緒對共享變數值的修改,能夠及時地被其他執行緒看到 JMM( JAVA記憶體模型)

java 執行同步

1.執行緒安全 何時出現:當同一資源被多個執行緒同時進行讀寫操作,資料遭到破壞,使得執行結果不準確。 競爭狀態:多個執行緒以一種衝突的方式讀寫公共資源,這種狀態稱為競爭狀態,如果一個類的物件在多執行緒程式中沒有導致競爭狀態,則可稱這個類是執行緒安全的。 解

Java 執行Thread,Runnable,Callable

Java 中實現多執行緒有三種方法:(1): 繼承Thread 類,覆蓋run() 方法。在run() 方法中不可拋異常,無返回值。(2): 實現 Runnable介面,實現 其中的run() 方法。

Java執行生產者和消費者

Java執行緒的作用是可以使一個程式中的執行緒可以並行執行,這樣可以大大縮短程式執行所需要的時間。但是當這些執行緒都對同一個變數或者記憶體進行操作的時候如果不加以控制就會出現許多不可預見的錯誤,而且在不同時間執行也會產生不同的錯誤,並且很難排查。 對於生產者和消

Java執行釋放鎖,釋放資源,釋放CPU

多執行緒中的wait與sleep到底誰釋放了鎖 首先,多執行緒中會使用到兩個延遲的函式,wait和sleep。 wait是Object類中的方法,而sleep是Thread類中的方法。 sleep是Thread類中的靜態方法。無論是在a執行緒中呼叫b的sl