溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java進階(7) - 并發(多線程基本概念)

發布時間:2020-06-29 21:39:01 來源:網絡 閱讀:213 作者:lm8751 欄目:編程語言

一、中斷
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異常。

  • obj.wait()是把當前線程放到obj的wait set;
  • obj.notify()是從obj的wait set里喚醒1個線程;
  • obj.notifyAll()是喚醒所有在obj的wait set里的線程。

三、線程的狀態轉移

  • 當創建一個Thread子類或實現Runnable接口類的實例時,線程進入【初始】狀態;
  • 調用實例的start方法后,線程進入【可執行】狀態;
  • 系統會在某一時刻自動調度處于【可執行】狀態的線程,被調度的線程會調用run方法,進入【執行中】狀態;
  • 線程執行完run方法后,進入【結束】狀態;
  • 處于【結束】狀態的線程,在某一時刻,會被JVM垃圾回收;
  • 處于【執行中】狀態的線程,若調用了Thread.yield方法,會回到【可執行】狀態,等待再次被調度;
  • 處于【執行中】狀態的線程,若調用了wait方法,會進入wait set并一直等待,直到被其它線程通過notify、notifyAll、interrupt方法喚醒;
  • 處于【執行中】狀態的線程,若調用了Thread.sleep方法,會進入【Sleep】狀態,無法繼續向下執行。當sleep時間結束或被interrupt時,會回到【可執行狀態】;
  • 處于【執行中】狀態的線程,若遇到阻塞I/O操作,也會停止等待I/O完成,然后回到【可執行狀態】

四、不可變模式
Immutable(不變的)參與者
Immutable參與者是一個字段值無法更改的類,也沒有任何用來更改字段值的方法。當Immutable參與者的實例建立后,狀態就完全不再變化。

適用場景:
Immutable模式的優點在于,“不需要使用synchronized保護”。而“不需要使用synchronized保護”的最大優點就是可在不喪失安全性與生命性的前提下,提高程序的執行性能。若例由多數線程所共享實,且訪問非常頻繁,Immutable模式就能發揮極大的優點。(final修飾變量性能高的原因之一)

參考:https://segmentfault.com/blog/ressmix_multithread?page=3

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女