ThreadLocal 你到底是个什么鬼
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
?
????很多文章都拿它跟同步機(jī)制作比較,我覺(jué)得這個(gè)思路對(duì)于理解這個(gè)東西完全沒(méi)有作用。
ThreadLocal跟synchronize這類東西作比較,是很多文章的套路,我感覺(jué)這么比較,就跟比較重載跟重寫(xiě)的區(qū)別,final跟finally的區(qū)別一樣,越比較越混亂。兩者關(guān)注的方向壓根都不同。
? ?ThreadLocal的應(yīng)用場(chǎng)合,我覺(jué)得最適合的是按線程多實(shí)例(每個(gè)線程對(duì)應(yīng)一個(gè)實(shí)例)的對(duì)象的訪問(wèn),并且這個(gè)對(duì)象很多地方都要用到
? ? 這個(gè)是我覺(jué)得解釋ThreadLocal最好的總結(jié),
? ? session的例子特別可以說(shuō)明問(wèn)題,一個(gè)線程對(duì)應(yīng)一個(gè)session,在執(zhí)行的過(guò)程當(dāng)中可能很多地方都要獲取session中的值,如果在編寫(xiě)代碼的過(guò)程當(dāng)中,一直把session當(dāng)做一個(gè)傳參數(shù),在方法中或者對(duì)象間各種傳遞,也不是不可以,但是這代碼得是有多難看。但是使用TreadLocal的話,代碼就簡(jiǎn)便了很多。而且還有很好的隔離性。所以ThreadLocal是一種編寫(xiě)代碼的思路,但是并不是只能采用這種方式才行。最后抄個(gè)例子,簡(jiǎn)單的說(shuō)明下這個(gè)東東怎么用。
package test; import java.util.Random; class Student { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class TestThreadLocal implements Runnable { ThreadLocal studentLocal = new ThreadLocal(); public static void main(String[] args) { TestThreadLocal t = new TestThreadLocal(); new Thread(t, "t1").start(); new Thread(t, "t2").start(); } @Override public void run() { accessStudent(); } private void accessStudent() { Student s = this.getStudent(); Random random = new Random(); int age = random.nextInt(100); System.out.println("current thread set age " + Thread.currentThread() + ":" + age); s.setAge(age); System.out.println("current thread first get age " + Thread.currentThread() + ":" + s.getAge()); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("current thread second get age " + Thread.currentThread() + ":" + s.getAge()); } public Student getStudent() { Student s = (Student) studentLocal.get(); if (s == null) { s = new Student(); studentLocal.set(s); } return s; } }? ??
轉(zhuǎn)載于:https://my.oschina.net/u/1246109/blog/834342
總結(jié)
以上是生活随笔為你收集整理的ThreadLocal 你到底是个什么鬼的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到自己不知道在哪里
- 下一篇: 梦到种地瓜是什么意思