JAVA多線程併發總結學習

JAVA多線程併發總結學習

簡單的知識要點


java中有哪幾種線程及其講解?

Java分爲兩種線程?

用戶線程和守護線程

什麼是守護線程?

守護線程也稱後臺線程,服務線程,它類似於一個保姆,守護線程的優先級比較低,用於爲系統中的其它對象和線程提供服務;所謂守護線程是指在程序運行的時候在後臺提供一種通用服務的線程,比如垃圾回收線程就是一個很稱職的守護者,並且這種線程並不屬於程序中不可或缺的部分。因 此,當所有的非守護線程結束時,程序也就終止了,同時會殺死進程中的所有守護線程。反過來說,只要任何非守護線程還在運行,程序就不會終止

什麼是用戶線程?

就是用戶自定義創建的一般簡單線程

用戶線程與守護線程的區別?

唯一的不同之處就在於虛擬機的離開:如果用戶線程已經全部退出運行了,只剩下守護線程存在了,虛擬機也就退出了。 因爲沒有了被守護者,守護線程也就沒有工作可做了,也就沒有繼續運行程序的必要了。將線程轉換爲守護線程可以通過調用Thread對象的setDaemon(true)方法來實現

  • thread.setDaemon(true)必須在thread.start()之前設置,否則會跑出一個IllegalThreadStateException異常。你不能把正在運行的常規線程設置爲守護線程
  • 在Daemon線程中產生的新線程也是Daemon的
  • 守護線程應該永遠不去訪問固有資源,如文件、數據庫,因爲它會在任何時候甚至在一個操作的中間發生中斷

線程的級別?

線程則是 JVM 級別的,以 Tomcat 爲例,如果你在 Web 應用中啓動一個線程,這個線程的生命週期並不>>會和 Web 應用程序保持同步。也就是說,即使你停止了 Web 應用,這個線程依舊是活躍的

生命週期:

守護進程(Daemon)是運行在後臺的一種特殊進程。它獨立於控制終端並且週期性地執行某種任務或等>>待處理某些發生的事件。也就是說守護線程不依賴於終端,但是依賴於系統,與系統“同生共死”。當 JVM >>中所有的線程都是守護線程的時候,JVM 就可以退出了;如果還有一個或以上的非守護線程則 JVM 不會退出


Thread的interrupt,isInterrupted,interrupted的線程中斷操作

  • 簡介
    1. interrupt

      嘗試中斷線程,只是終端標識,並非直譯讓線程停止調,改變線程中斷狀態爲中斷,中斷的是可選線程中斷狀態

    2. isInterrupted

      只是獲取線程中斷狀態,不做任何修改操作,獲取的是可選線程中斷狀態

    3. interrupted

      判斷當前線程是否已經中斷。返回中斷狀態並清空重置中斷狀態,(連續)第二次調用此方法時返回false

  • 說明
    1. Thread.interrupt()方法不會中斷一個正在運行的線程。
    2. 中斷一個線程只是爲了引起該線程的注意,被中斷線程可以決定如何應對中斷。
    3. 如果線程在調用 Object 類的 wait()、wait(long) 或 wait(long, int) 方法,或者該Thread類的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法過程中受阻,則其中斷狀態將被清除,它還將收到一個InterruptedException異常。這個時候,我們可以通過捕獲InterruptedException異常來終止線程的執行,具體可以通過return等退出或改變共享變量的值使其退出。

Thread的wait(), notify(), notifyAll()等方法介紹

  1. wait()的作用是讓當前線程進入等待狀態同時

    wait()也會讓當前線程釋放它所持有的鎖。“直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法”,當前線程被喚醒(進入“就緒狀態”)

  2. notify()和notifyAll()的喚醒對象上的等待線程

    notify()和notifyAll()的作用,則是喚醒當前對象上的等待線程;notify()是喚醒單個線程,而notifyAll()是喚醒所有的線程。

  3. wait使當前線程處於等待(阻塞)狀態

    wait(long timeout)讓當前線程處於“等待(阻塞)狀態”,“直到其他線程調用此對象的notify()方法或 notifyAll() 方法,或者超過指定的時間量”,當前線程被喚醒(進入“就緒狀態”)。

Reference

  • 線程的中斷interrupt使用講解 | 明月(Alioo) | https://blog.csdn.net/hl_java/article/details/79162097
發佈了87 篇原創文章 · 獲贊 60 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章