線程
並行與併發
並行:指兩個或多個事件在同一時刻發生(同時發生)。
併發:指兩個或多個事件在同一個時間段內發生。
併發指的是在一段時間內宏觀上有多個程序同時運行,這在單 CPU 系統中,每
一時刻只能有一道程序執行,即微觀上這些程序是分時的交替運行,只不過是給人的感覺是同時運行,那是因爲分時交替
運行的時間是非常短的。
進程與線程
進程:是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間。(一個應用程序可以同時運行多個進程);
進程也是程序的一次執行過程,是系統運行程序的基本單位;系統運行一個程序即是一個進程從創建、運行到消亡的過
程。
線程:進程內部的一個獨立執行單元;一個進程可以同時併發的運行多個線程,可以理解爲一個進程便相當於一個單
CPU 操作系統,而線程便是這個系統中運行的多個任務。
Java 程序的進程裏面至少包含兩個線程,主進程也就是 main()方法線程,另外一個是垃圾回收機制線程。
進程與線程的區別
進程:有獨立的內存空間,進程中的數據存放空間(堆空間和棧空間)是獨立的,至少有一個線程。
線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小的多。
注意:
1. 因爲一個進程中的多個線程是併發運行的,那麼從微觀角度看也是有先後順序的,哪個線程執行完全取決於CPU 的調
度,程序員是干涉不了的。而這也就造成的多線程的隨機性。
2. Java 程序的進程裏面至少包含兩個線程,主進程也就是 main()方法線程,另外一個是垃圾回收機制線程。每當使用
java 命令執行一個類時,實際上都會啓動一個 JVM,每一個 JVM 實際上就是在操作系統中啓動了一個線程,java 本身具
備了垃圾的收集機制,所以在 Java 運行時至少會啓動兩個線程。
3. 由於創建一個線程的開銷比創建一個進程的開銷小的多,那麼我們在開發多任務運行的時候,通常考慮創建多線程,
而不是創建多進程。
創建線程類
Java使用 java.lang.Thread 類代表線程,所有的線程對象都必須是Thread類或其子類的實例。
通過繼承Thread類來創建和啓動線程
首先定義繼承Thread類的子類,並重寫run方法, 該run()方法的方法體就代表了線程需要完成的任務,因此把run()方法稱爲
線程執行體。
然後創建線程類的對象並調用start()方法啓動線程
示例: