溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么實(shí)現(xiàn)java線程封閉

發(fā)布時(shí)間:2021-11-16 14:40:11 來源:億速云 閱讀:170 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“怎么實(shí)現(xiàn)java線程封閉”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么實(shí)現(xiàn)java線程封閉”吧!

線程封閉

多線程訪問共享可變數(shù)據(jù)時(shí),并不是所有的時(shí)候,都要用到共享數(shù)據(jù), 所以線程封閉的概念就提了出來。 所謂線程封閉, 就是指數(shù)據(jù)都封閉在各自的線程之中, 不需要不需要同步。線程封閉的具體的實(shí)現(xiàn)主要有ThreadLocal局部變量

ThreadLocal

ThreadLocal是Java里一種特殊的變量,一個(gè)線程級別的變量,每個(gè)線程都有一個(gè)自己獨(dú)立的ThreadLocal變量。它的競爭條件被徹底消除, 在并發(fā)模式下是絕對安全的。 用法:ThreadLocal<T> var = new ThreadLocal<T>(); 會自動在每個(gè)線程上創(chuàng)建一個(gè)T的副本, 副本之間彼此獨(dú)立,互不影響。 可以用ThreadLocal存儲一些參數(shù),以便在線程中多個(gè)方法中使用, 用來代替方法傳參的的做法

代碼示例:

/** 線程封閉示例 */
public class Demo6 {
  /** threadLocal變量,每個(gè)線程都有一個(gè)副本,互不干擾 */
  public static ThreadLocal<String> value = new ThreadLocal<>();

  /**
   * threadlocal測試
   *
   * @throws Exception
   */
  public void threadLocalTest() throws Exception {

    // threadlocal線程封閉示例
    value.set("這是主線程設(shè)置的123"); // 主線程設(shè)置值
    String v = value.get();
    System.out.println("線程1執(zhí)行之前,主線程取到的值:" + v);

    new Thread(
            new Runnable() {
              @Override
              public void run() {
                String v = value.get();
                System.out.println("線程1取到的值:" + v);
                // 設(shè)置 threadLocal
                value.set("這是線程1設(shè)置的456");

                v = value.get();
                System.out.println("重新設(shè)置之后,線程1取到的值:" + v);
                System.out.println("線程1執(zhí)行結(jié)束");
              }
            })
        .start();

    Thread.sleep(5000L); // 等待所有線程執(zhí)行結(jié)束

    v = value.get();
    System.out.println("線程1執(zhí)行之后,主線程取到的值:" + v);
  }

  public static void main(String[] args) throws Exception {
    new Demo6().threadLocalTest();
  }
}

輸出結(jié)果:

線程1執(zhí)行之前,主線程取到的值:這是主線程設(shè)置的123
線程1取到的值:null
重新設(shè)置之后,線程1取到的值:這是線程1設(shè)置的456
線程1執(zhí)行結(jié)束
線程1執(zhí)行之后,主線程取到的值:這是主線程設(shè)置的123

棧封閉

局部變量的固有屬性之一就是封閉在線程中 它們位于執(zhí)行線程的棧中, 其他線程無法訪問這個(gè)棧

到此,相信大家對“怎么實(shí)現(xiàn)java線程封閉”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI