您好,登錄后才能下訂單哦!
一、中斷
interrupt方法只改變目標線程的中斷狀態(interrupt status),當線程處于 wait、sleep、join等狀態時
都在方法內部不斷地檢查中斷狀態的值,當調用interrupt會拋出InterruptedException異常。
interrupt方法
Thread實例方法: 必須由其它線程獲取被調用線程的實例后,進行調用。實際上,只是改變了被調用線程的內部中斷狀態;
Thread.interrupted方法
Thread類方法: 必須在當前執行線程內調用,該方法返回當前線程的內部中斷狀態,然后清除中斷狀態(置為false)
isInterrupted方法
Thread實例方法:用來檢查指定線程的中斷狀態。當線程為中斷狀態時,會返回true;否則返回false。
二、協調
wait set / wait方法
每個Java類的實例都有一個wait set,當對象執行wait方法時,當前線程就會暫停,并進入該對象的wait set
注: 當前線程若要執行obj.wait(),則必須先獲取該對象鎖。當線程進入wait set后,就已經釋放了該對象鎖。
notify方法
notify方法相當于從wait set中從挑出一個線程并喚醒。
下圖中線程A在當前實例對象的wait set中等待,此時線程B必須拿到同一實例的對象鎖,才能調用notify方法喚醒wait set中的任意一個線程。
notifyAll方法
notifyAll方法相當于將wait set中的所有線程都喚醒。
wait、notify、notifyAll這三個方法都是java.lang.Object類的方法(注意,不是Thread類的方法)。
若線程沒有拿到當前對象鎖就直接調用對象的這些方法,都會拋出java.lang.IllegalMonitorStateException異常。
三、線程的狀態轉移
四、不可變模式
Immutable(不變的)參與者
Immutable參與者是一個字段值無法更改的類,也沒有任何用來更改字段值的方法。當Immutable參與者的實例建立后,狀態就完全不再變化。
適用場景:
Immutable模式的優點在于,“不需要使用synchronized保護”。而“不需要使用synchronized保護”的最大優點就是可在不喪失安全性與生命性的前提下,提高程序的執行性能。若例由多數線程所共享實,且訪問非常頻繁,Immutable模式就能發揮極大的優點。(final修飾變量性能高的原因之一)
參考:https://segmentfault.com/blog/ressmix_multithread?page=3
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。