欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學(xué)堂Java培訓(xùn)之ThreadLocal類應(yīng)用實(shí)戰(zhàn)案例分析

2019-09-20 13:17:37 4836瀏覽

今天千鋒扣丁學(xué)堂Java培訓(xùn)老師給大家ThreadLocal類應(yīng)用實(shí)戰(zhàn)案例分析的詳細(xì)介紹,結(jié)合具體案例形式分析了javaThreadLocal類的功能、原理、用法及相關(guān)操作注意事項(xiàng),下面我們一起來看一下吧。



ThreadLocal,是ThreadLocalVariable(線程局部變量)的意思,也許將它命名為ThreadLocalVar更加合適。

線程局部變量(ThreadLocal)其實(shí)的功用非常簡(jiǎn)單,就是為每一個(gè)使用該變量的線程都提供一個(gè)變量值的副本,使每一個(gè)線程都可以獨(dú)立地改變自己的副本,而不會(huì)和其它線程的副本沖突。從線程的角度看,就好像每一個(gè)線程都完全擁有該變量。

ThreadLocal類的用法非常簡(jiǎn)單,它只提供了如下三個(gè)public方法:

Tget():返回此線程局部變量中當(dāng)前線程副本中的值。

voidremove():刪除此線程局部變量中當(dāng)前線程的值。

voidset(Tvalue):設(shè)置此線程局部變量中當(dāng)前線程副本中的值。

1、實(shí)戰(zhàn)

class Account
{
   /* 定義一個(gè)ThreadLocal類型的變量,該變量將是一個(gè)線程局部變量
   每個(gè)線程都會(huì)保留該變量的一個(gè)副本 */
   private ThreadLocal<String> name = new ThreadLocal<>();
   // 定義一個(gè)初始化name成員變量的構(gòu)造器
   public Account(String str)
   {
      this.name.set(str);
      // 下面代碼用于訪問當(dāng)前線程的name副本的值
      System.out.println("---" + this.name.get());
   }
   // name的setter和getter方法
   public String getName()
   {
      return name.get();
   }
   public void setName(String str)
   {
      this.name.set(str);
   }
}
class MyTest extends Thread
{
   // 定義一個(gè)Account類型的成員變量
   private Account account;
   public MyTest(Account account, String name)
   {
      super(name);
      this.account = account;
   }
   public void run()
   {
      // 循環(huán)10次
      for (int i = 0 ; i < 10 ; i++)
      {
        // 當(dāng)i == 6時(shí)輸出將賬戶名替換成當(dāng)前線程名
        if (i == 6)
        {
           account.setName(getName());
        }
        // 輸出同一個(gè)賬戶的賬戶名和循環(huán)變量
        System.out.println(account.getName()
           + " 賬戶的i值:" + i);
      }
   }
}
public class ThreadLocalTest
{
   public static void main(String[] args)
   {
      // 啟動(dòng)兩條線程,兩條線程共享同一個(gè)Account,
      // 主線程中有一個(gè)Account的name,線程甲和線程乙中也各有一個(gè)Account的name,三者互不干擾
      Account at = new Account("初始名");
      /*
      雖然兩條線程共享同一個(gè)賬戶,即只有一個(gè)賬戶名
      但由于賬戶名是ThreadLocal類型的,所以每條線程
      都完全擁有各自的賬戶名副本,所以從i == 6之后,將看到兩條
      線程訪問同一個(gè)賬戶時(shí)看到不同的賬戶名。
      */
      new MyTest(at , "線程甲").start();
      new MyTest(at , "線程乙").start ();
   }
}

2、運(yùn)行

---初始名
null 賬戶的i值:0
null 賬戶的i值:0
null 賬戶的i值:1
null 賬戶的i值:1
null 賬戶的i值:2
null 賬戶的i值:2
null 賬戶的i值:3
null 賬戶的i值:3
null 賬戶的i值:4
null 賬戶的i值:4
null 賬戶的i值:5
線程甲 賬戶的i值:6
線程甲 賬戶的i值:7
線程甲 賬戶的i值:8
線程甲 賬戶的i值:9
null 賬戶的i值:5
線程乙 賬戶的i值:6
線程乙 賬戶的i值:7
線程乙 賬戶的i值:8
線程乙 賬戶的i值:9

說明:賬號(hào)名實(shí)際有3個(gè)副本,主線程一個(gè),另外啟動(dòng)的兩個(gè)線程各一個(gè),它們的值互不干擾,每個(gè)線程完全擁有自己的ThreadLocal變量,這就是ThreadLocal的用途。

以上就是關(guān)于千鋒扣丁學(xué)堂Java培訓(xùn)之ThreadLocal類應(yīng)用實(shí)戰(zhàn)案例分析的全部?jī)?nèi)容,希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助,想要學(xué)好Java開發(fā)小編給大家推薦口碑良好的扣丁學(xué)堂,扣丁學(xué)堂有專業(yè)老師制定的Java學(xué)習(xí)路線圖輔助學(xué)員學(xué)習(xí),此外還有與時(shí)俱進(jìn)的Java課程體系和Java視頻教程供大家學(xué)習(xí),想要學(xué)好Java開發(fā)技術(shù)的小伙伴快快行動(dòng)吧??鄱W(xué)堂Java技術(shù)交流群:850353792。


                          JavaEE/微服務(wù)/源碼解析/分布式/企業(yè)級(jí)架構(gòu)【VIP體驗(yàn)課】


     【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】        【掃碼進(jìn)入JavaEE/微服務(wù)VIP免費(fèi)公開課】  



查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>

標(biāo)簽: Java培訓(xùn) Java視頻教程 Java多線程 Java面試題 Java學(xué)習(xí)視頻 springBoot項(xiàng)目

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部