進程與線程之間的關係,會由於平臺的差別(OS、硬件),有極大的不一樣。即便在相同的平臺,進程與線程之間的關係也會由於Java虛擬機(Java Virtual Machine,JVM)的實現不一樣而有所不一樣。不過通常而言,咱們能夠說一個進程裏能夠創建多條的線程。 1)線程間的內存是共享的 進程與線程最大的差別在於內存可否共享。 一般每一個進程所擁有的內存空間是各自獨立的,進程不能擅自讀取、改寫其餘進程的內存空間。由於進程的內存空間是各自獨立的,因此進程無須擔憂被其餘進程破壞的危險。 線程則是共享內存的。因此咱們常常會使用一條線程在內存上寫入數據,而由其餘的線程來讀取。在這裏所說「共享相同的內存」,在Java中就是「共享相同的實例」。Java實例存放在內存上,而多條線程之間的溝通可使用很天然、簡單的方式作到。而由於同一個實例可由多個線程同時訪問,因此須要正確地進行共享互斥。 2)線程間的context-switch較容易 進程與線程另外一個差別,在於context-switch的繁重程度。 要切換執行中的進程,進程必須將如今本身的狀態(context信息)存儲下來,並將下一個要開始執行的進程之前所保留的context數據讀回來。這個信息的切換操做(context switch)須要花費一些時間。 切換執行中的線程時,線程與進程同樣,須要進行context-switch的操做。然而,線程所管理的context信息比進程要來的少,通常而言線程的context-swtich比進程的context-switch快的多。 因此,須要緊密地進行多項相關的工做時,線程一般會比進程來的實用。 內容來源於《Java多線程設計模式》一書,方便之後查看。