線程和進程的基本定義
線程:是一個比進程更小的執行單位,能夠完成進程中的一個功能,也被稱爲輕量級進程。一個進程在其執行的過程中可以產生多個線程。
【注】線程與進程不同的是:同類的多個線程共享進程的堆和方法區資源,但每個線程有自己的程序計數器、虛擬機棧和本地方法棧,所以系統在產生一個線程,或是在各個線程之間作切換工作時,負擔要比進程小得多
進程:在操作系統中能夠獨立運行,並且作爲資源分配的基本單位。它表示運行中的程序。系統運行一個程序就是一個進程從創建、運行到消亡的過程。
-
程序計數器爲什麼是私有的?
程序計數器主要有下面兩個作用:
-
- 字節碼解釋器通過改變程序計數器來依次讀取指令,從而實現代碼的流程控制,如:順序執行、選擇、循環、異常處理。
- 在多線程的情況下,程序計數器用於記錄當前線程執行的位置,從而當線程被切換回來的時候能夠知道該線程上次運行到哪兒了。
(需要注意的是,如果執行的是 native 方法,那麼程序計數器記錄的是 undefined 地址,只有執行的是 Java 代碼時程序計數器記錄的纔是下一條指令的地址。)
所以,程序計數器私有主要是爲了線程切換後能恢復到正確的執行位置。
- 虛擬機