JavaThreadLocal

      網友投稿 636 2025-04-02

      1?ThreadLocal接口出現原因


      使用ThreadLocal保存當前線程的變量值,這樣你想獲取該變量的值的時候,獲取到的都是本線程的變量值,不會獲取到其他線程設置的值,早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal為解決多線程程序的并發問題提供了一種新的思路。使用這個工具類可以很簡潔地編寫出優美的多線程程序

      2 接口主要的API

      void set(Object value)設置當前線程的線程局部變量的值。

      public Object get()該方法返回當前線程所對應的線程局部變量。

      public void remove()將當前線程局部變量的值刪除,目的是為了減少內存的占用,該方法是JDK 5.0新增的方法。需要指出的是,當線程結束后,對應該線程的局部變量將自動被垃圾回收,所以顯式調用該方法清除線程的局部變量并不是必須的操作,但它可以加快內存回收的速度。

      protected Object initialValue()返回該線程局部變量的初始值,該方法是一個protected的方法,顯然是為了讓子類覆蓋而設計的。這個方法是一個延遲調用方法,在線程第1次調用get()或set(Object)時才執行,并且僅執行1次。ThreadLocal中的缺省實現直接返回一個null。

      3 測試Demo

      //'main' method must be in a class 'Rextester'.

      //Compiler version 1.8.0_111

      import java.util.*;

      import java.lang.*;

      class Rextester {

      //通過匿名內部類覆蓋ThreadLocal的initialValue()方法,指定初始值

      private static ThreadLocal tLocal = new ThreadLocal() {

      public Integer initialValue() {

      return 0;

      }

      };

      //獲取下一個序列值

      public int getNextNum() {

      tLocal.set(tLocal.get() + 1);

      return tLocal.get();

      }

      public static void main(String args[]) {

      Rextester rt = new Rextester();

      // 3個線程共享rt

      TestClient t1 = new TestClient(rt);

      TestClient t2 = new TestClient(rt);

      TestClient t3 = new TestClient(rt);

      t1.start();

      t2.start();

      t3.start();

      }

      private static class TestClient extends Thread {

      private Rextester rt;

      Java之ThreadLocal

      public TestClient(Rextester rt) {

      this.rt = rt;

      }

      public void run() {

      for (int i = 0; i < 3; i++) {

      // 每個線程打出3個序列值

      System.out.println("thread[" + Thread.currentThread().getName() + "] --> rt["

      + rt.getNextNum() + "]");

      }

      }

      }

      }

      4 運行結果

      thread[Thread-0] --> rt[1]

      thread[Thread-2] --> rt[1]

      thread[Thread-1] --> rt[1]

      thread[Thread-0] --> rt[2]

      thread[Thread-1] --> rt[2]

      thread[Thread-0] --> rt[3]

      thread[Thread-2] --> rt[2]

      thread[Thread-1] --> rt[3]

      thread[Thread-2] --> rt[3]

      Java 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:PostgreSQL13 新特性介紹
      下一篇:制造業生產管理流程圖(制造業生產管理流程圖怎么畫)
      相關文章
      亚洲福利电影在线观看| 色九月亚洲综合网| 亚洲国产精品成人AV在线 | 亚洲日韩中文在线精品第一| 亚洲中文字幕乱码熟女在线| 亚洲伦理中文字幕| 久久亚洲最大成人网4438| 亚洲网站在线免费观看| 亚洲福利一区二区| 精品日韩亚洲AV无码一区二区三区 | 亚洲av综合色区| 亚洲国产精品无码成人片久久 | 亚洲综合精品网站在线观看| 亚洲男人天堂2020| 精品亚洲一区二区三区在线播放| 国产亚洲精品2021自在线| xvideos亚洲永久网址| 亚洲av综合日韩| 亚洲av最新在线观看网址| 精品久久久久久久久亚洲偷窥女厕| 亚洲高清国产拍精品熟女| 亚洲精品无码久久久久牙蜜区| 亚洲人成色99999在线观看| 亚洲a∨无码一区二区| 亚洲AV午夜成人影院老师机影院| 日韩亚洲一区二区三区| 亚洲91av视频| 亚洲大香人伊一本线| 亚洲fuli在线观看| 亚洲精品又粗又大又爽A片| 老子影院午夜伦不卡亚洲| 亚洲天堂中文字幕在线| 亚洲理论电影在线观看| 亚洲欧洲日产国码久在线观看| 久久精品亚洲一区二区三区浴池 | 亚洲人成影院在线无码观看| 亚洲中文字幕无码不卡电影| 亚洲av综合色区| 亚洲国产精品综合久久2007| 亚洲一久久久久久久久| 国产亚洲综合视频|