extends Thread 和 implements Runable區(qū)別
thread通過繼承Thread實(shí)現(xiàn)的類由境,類內(nèi)成員變量是線程間不共享的劣摇,是否使用threadLocal無區(qū)別。因?yàn)槊看问褂眠@種類時(shí)途凫,都是new新的類倍踪。Thread t = new extThread();
thread通過重寫runable接口的類,類內(nèi)成員變量是可以線程間共享的茂嗓。因?yàn)楫?dāng)使用時(shí)候類只new了一次。ImplThread it = new ImplThread();Thread t = new Thread(it);
ThreadLocal
可以將類中處于共享內(nèi)存/主內(nèi)存的變量科阎,在不同線程中互斥述吸。
原理及內(nèi)存泄露風(fēng)險(xiǎn)-由于其和thread生命周期同步,key=null而value仍存在锣笨,thread結(jié)束才會(huì)被回收value
Thread中有個(gè)成員變量 ThreadLocal.Threadlocalmap類型
Thread.class
該成員變量通過Threadlocal管理賦值蝌矛,ThreadLocalMap是一個(gè)類似hashmap的結(jié)構(gòu),key為threadlocal實(shí)例自身
ThreadLocal$ThreadLocalMap.class