多線程的基礎知識
阿新 • • 發佈:2019-04-19
.com inf 代碼 tar 使用 強制 生命周期 圖片 語句
7、什麽是線程的安全問題
1、程序、進程、線程的基本概念
程序:為了完成某種任務用某一種語言編寫的一組指令的集合就叫程序。程序就是一段靜態的代碼。
進程:進程是程序的依次執行過程,或者說是正在運行的一個程序。這是一個動態的過程,有它自身的產生運行和消亡的過程--生命周期。進程是資源分配的基本單位。
線程:進程可進一步的劃分為線程,線程是一個程序內部的一條執行路徑。線程是調度和執行的基本單位,每一個線程擁有獨立的程序計數器和運行棧,線程之間切換的開銷相對來說比較小。
備註:一個Java程序至少有三個線程:main()線程、垃圾收集線程、異常處理線程。
2、並發和並行的基本概念
並行:多個CPU同時執行多個任務。
並發:一個CPU同時執行多個任務。
3、多線程程序的優點
- 提高應用程序的響應時間
- 提高計算機系統CPU的利用效率
- 改善程序結構。
4、線程的分類
Java中的線程分為用戶線程和守護線程。
- 他們兩者在幾乎每個方面都是相同的,唯一的區別就是判斷JVM何時離開
- 守護線程是用來服務用戶線程的,但是也可以把一個用戶線程更改為守護線程
- Java垃圾回收線程就是一個典型的守護線程
- 如果JVM中的線程全部是守護線程的時候,JVM將會退出
5、線程創建的四種方式
- 使用繼承Thread類的方式創建多線程
- 使用實現Runnable接口的方式創建多線程
- 使用實現Callable接口的方式創建多線程
- 使用線程池的方式創建多線程
6、線程的生命周期
一個線程完整的生命周期通常包含五個部分:
- 新建狀態:當一個Thread類及其子類的對象被聲明並創建時,新生的線程就處於新建狀態
- 就緒狀態:新建的線程執行start()方法之後,將會進入線程隊列等待CPU時間片,此時的線程已經具備了執行的條件,只是沒有分配到CPU
- 運行狀態:處於就緒狀態的線程被調度並且獲得了CPU時間片之後,就能執行狀態
- 阻塞狀態:在某種情況下,當前的線程讓出CPU並臨時中斷自己的執行,此時的線程就進入了阻塞狀態
- 死亡狀態:線程完成了全部的工作或者被強制提前結束或者線程出現異常導致線程結束
7、什麽是線程的安全問題
多線程安全問題,是由於多個線程在訪問共享的數據(共享的資源),並且操作共享數據的語句不止一條。那麽這樣在操作多條共享數據的線程之間就可能發生線程切換。只要切換就可能有安全問題。
當多個線程執行解決某個方法時,不管這些線程如何交替的執行,我們在主程序中不需要去做任何的同步,這個類的結果行為都是我們設想的正確行為,那麽我們就可以說這個類時線程安全的。
多線程的基礎知識