1. 程式人生 > >JAVA複習之多執行緒

JAVA複習之多執行緒

java中多執行緒同步是什麼?

在多執行緒程式下,同步能控制對共享資源的訪問。如果沒有同步,當一個java縣城在修改一個共享變數時,另外一個執行緒正在使用或者更新同一個變數,這樣容易導致程式出現錯誤。

解釋實現多執行緒的幾種方法?區別是什麼?

Java執行緒可以實現Runnable介面或者繼承Thread類來實現,當你打算多重繼承時, 優先選擇實現Runnable啟動方法不一樣。Thread1繼承,Thread2實現Runnable介面,則啟動一個Thread1執行緒可以使用new Thread1().start(),而啟動Thread2執行緒則new Thread(new Thread2()).start()。

Thread.start()與Thread.run()有什麼區別?

run()方法:在本執行緒內呼叫該Runnable物件的run()方法,可以重複多次呼叫;

start()方法:啟動一個執行緒,呼叫該Runnable物件的run()方法,不能多次啟動一個執行緒;

​​​​​​​為什麼需要run()和start()方法,我們可以只用run()方法來完成任務嗎?

我們需要run()&start()這兩個方法是因為JVM建立一個單獨的執行緒不同於普通方法的呼叫,所以這項工作由執行緒的start方法來完成,start由本地方法實現,需要顯式地被呼叫,使用這兩個方法的另外一個好處是任何一個物件都可以作為執行緒執行,只要實現了Runnable介面,這就避免了因繼承了Thread類而造成的java的多繼承問題。

什麼是ThreadLocal類,怎麼使用它?

ThreadLocal是一個執行緒級別的區域性變數,並非“本地執行緒”。ThreadLocal為每個使用該變數的執行緒提供了一個獨立的變數副本,每個執行緒修改副本時不影響其他執行緒物件的副本

執行緒區域性變數(ThreadLocal variables)的關鍵點:

一個執行緒區域性變數為每個執行緒方便的提供了一個單獨的變數。Threadlocal例項通常作為靜態的私有的欄位出現在一個類中,這個類用來關聯一個執行緒。當多個執行緒訪問ThreadLocal例項時,每個執行緒維護ThreadLocal提供的獨立的變數副本。常用的使用可在Dao模式中見到,當Dao類作為一個單例類時,資料庫連線被每一個執行緒獨立的維護,互不影響。