Java多執行緒筆記

2021-04-12 23:52:57 字數 1835 閱讀 1920

synchronized修飾符是不會被子類繼承的。也就是說,乙個執行緒安全的可繼承類,有可在子類化時喪失安全性:p60

當執行緒在寫指定欄位的值時,若這個字段不是volatile也沒有用synchronized同步化時,其它執行緒可能看不到這種變化。這不是可不可以分割的問題,而是其它執行緒是否可見的問題。:p66

涉及到執行緒之後,如果乙個類是sharedresource角色,那麼它裡面的protect域和public域(如果有,當然可能性極小)就要極為小心,因為對於包訪問權和子類訪問權,有可能會發生執行緒問題。

有乙個問題其實在tij3上就有困擾,就是主線程的退出問題實際和書上不符;現在我想有答案了。thread.join()方法是讓主線程等待子執行緒執行完畢後再退出,但是實際上子執行緒就算不呼叫join()方法,主線程也一樣等待子執行緒結束後才退出。原來是因為jdk1.4以後主線程會自動呼叫子執行緒的join()方法

養成良好習慣:共享標誌一定要定義成volatile

理解checked exception的另一種思路:其實就是乙個方法在一定情況下的特殊返回值。比如乙個執行緒t在方法m中呼叫了thread.sleep時,另乙個執行緒呼叫了t.interrupt(),這時t將丟擲乙個interruptedexception,而其意義並非發生了錯誤,而只是得到一種不一般的返回值,交給catch()來處理。所以checked exception可以理解為程式的一種擴充套件流

使用immutable的乙個好處是在多執行緒環境下不用考慮同步問題,而其伴隨類--mutable則要使用synchronized進行同步,損失效率

wait()/notifyall()機制,是由某個被執行緒所呼叫的類的函式來呼叫,使呼叫者執行緒進入鎖物件的wait區,再把鎖釋放出來;notify也是由該類的函式所呼叫,喚醒wait區的乙個執行緒,該執行緒要再對前述第乙個函式進行呼叫,首先還是要獲得鎖;wait()和notify()都必須在synchronized內使用。

書評:在read-write-lock parten中,物理鎖和邏輯鎖初步分離了出來。鎖和鎖要保護的物件不再是同乙個物件,邏輯鎖可以作更複雜的事,實現更複雜的功能。

swing採用了workerthread 模式,但是workerthread只有乙個:event-dispatching thread。swing元件都假設只有event-dispatching thread這乙個執行緒來訪問它,所以都不是執行緒安全的。也就是說,我們若以自己建立的執行緒去呼叫元件的方法,其實是危險的。無論如何都想要呼叫元件的方法時,就該將要執行的操作內容建立成runnable物件,使用invokeandwait方法交給event-dispatching thread來呼叫。:p218

呼叫interrupt方法後,可以中斷執行緒。這裡所說的中斷執行緒是指下面兩種中的一種:

1) 執行緒變成「中斷狀態」對「狀態」的反應

2) 丟擲「異常interruptedexception」 對「控制」的反應。

兩種檢查是否中斷狀態的方法:

呼叫thread.interrputed方法後,執行緒就不是中斷狀態了。也就是說,只要呼叫一次thread.inerrupted方法後,中斷狀態就會被清除。

if(thread.currentthread().isinterrupted())

關於wait()和notify()/notifyall()作為object方法我想清楚了;interrupt()是thread物件方法清楚了;sleep以及其它一些thread類方法,我猜想應該相當於thread.getcurrentthread().***()吧--待以後的學習。

執行clientthread(以及任何其它執行緒都一樣)的構造器的執行緒與執行run方法的執行緒相異。p448

java 多執行緒筆記(一)

首先,為了啟動乙個新的執行緒在虛擬機器中執行,要構造thread類的乙個例項,並呼叫start 方法。thread t new thread 當然了,這個執行緒什麼也沒有,要讓他先搞點事情。要讓他搞事情,就要重寫t的run 方法,我們應當把執行緒要做的所有工作都放在這個函式裡面,執行緒在這個方法裡面...

Java多執行緒學習筆記

程序與執行緒 1.程序 執行中的程式 乙個程序至少包含乙個執行緒 2.執行緒 程序中負責程式執行的執行單元 執行緒本身依靠程式進行執行 執行緒是程式中的順序控制流,只能使用分配給程式的資源和環境 3.單執行緒 程式中只存在乙個執行緒,實際上主方法就是乙個主線程 4.多執行緒 在乙個程式中執行多個任務...

java多執行緒學習筆記

1 執行緒是乙個程式內部不同的執行路徑 2 生成執行緒只要能使用介面就不要繼承,繼承後就不能繼承其他的類,比較死。而且繼承的run方法不能丟擲與父類不同的異常。比如sleep的intterruptedexception 3 start方法只是說我準備好了,進入就緒狀態了,等待排程後才進入執行狀態 4...