ThreadLocal知识介绍
生活随笔
收集整理的這篇文章主要介紹了
ThreadLocal知识介绍
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ThreadLocal為解決多線程的并發(fā)問題提供了一種新的思路,使用這個(gè)工具類可以優(yōu)美的編寫出多線程程序。
ThreadLocal他不是一個(gè)線程,而是線程的一個(gè)本地化對(duì)象。當(dāng)工作于多個(gè)線程的對(duì)象使用ThreadLocal維護(hù)變量時(shí),ThreadLocal為每個(gè)使用改變量的線程分配一個(gè)獨(dú)立的變量副本,所以每一個(gè)線程可以獨(dú)立的改變自己的副本,而不會(huì)影響其他線程的對(duì)應(yīng)的副本。
ThreadLocal接口有四個(gè)方法
ThreadLocal如何做到為每一個(gè)線程維護(hù)一份獨(dú)立的變量副本呢?實(shí)現(xiàn)的思路是:在
ThreadLocal類中有個(gè)Map,用于存儲(chǔ)每一個(gè)線程的變量副本,Map中元素的key為線程對(duì)象,而value對(duì)應(yīng)線程的變量副本。
下面直接上代碼看實(shí)例: public class SequenceNumber {private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){public Integer initialValue(){return 0;}};public int getNextNum(){seqNum.set(seqNum.get()+1);return seqNum.get();}public static void main (String[] args) throws java.lang.Exception{SequenceNumber sn = new SequenceNumber();TestClient t1 = new TestClient(sn);TestClient t2 = new TestClient(sn);TestClient t3 = new TestClient(sn);t1.start();t2.start();t3.start();}private static class TestClient extends Thread{private SequenceNumber sn;public TestClient(SequenceNumber sn){this.sn = sn;}public void run (){for (int i= 0;i<3 ;i++ ) {System.out.println("thread["+ Thread.currentThread().getName()+"]sn["+ sn.getNextNum()+"]");}}} } 運(yùn)行后的輸出如下:從結(jié)果可以看出:每個(gè)線程所產(chǎn)生的程序雖然共享同一個(gè)SequenceNumber 實(shí)例 ,但是他們呢并沒有相互干擾的情況出現(xiàn),而是各自產(chǎn)生獨(dú)立的序列號(hào),這是因?yàn)槲椅覀兺ㄟ^<h3>ThreadLocal為每一個(gè)線程提供了獨(dú)立的副本。</h3> 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的ThreadLocal知识介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机械--NX2007(UG)有限元分析教
- 下一篇: 车牌的归属地(省份和地级市) js