1、進程和線程的區別
進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。
線程:同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(PC),線程切換開銷小。
線程和進程一樣分為五個階段:創建、就緒、運行、阻塞、終止。
多進程是指操作系統能同時運行多個任務(程序)。
多線程是指在同一程序中有多個順序流在執行。
進程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生
影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,
所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發
操作,只能用線程,不能用進程。
1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.2) 線程的劃分尺度小于進程,使得多線程程序的并發性高。3) 進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。4)線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,
必須依存在應用程序中,由應用程序提供多個線程執行控制。5)從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,
來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
而進程則可以跨機器遷移。
建議:進程與線程的詳細解釋
線程與進程的通俗解釋
2、在java中如何實現線程
(1)繼承Thread類創建線程 Thread類本質上是實現了Runnable接口的一個實例,代表一個線程的實例。啟動線程的唯一方法就是通過Thread類的start()實例方法。start()方法是一個native方法,它將啟動一個新線程,并執行run()方法。這種方式實現多線程很簡單,通過自己的類直接extend Thread,并復寫run()方法,就可以啟動新線程并執行自己定義的run()方法。

通過thread源碼看到,thread中start方法最后調用的是本地方法。native 詳解
(2)實現Runnable接口創建線程 如果自己的類已經extends另一個類,就無法直接extends Thread,此時,可以實現一個Runnable接口,如下:為了啟動MyThread,需要首先實例化一個Thread,并傳入自己的MyThread實例:事實上,當傳入一個Runnable target參數給Thread后,Thread的run()方法就會調用target.run(),參考JDK源代碼:
(3)使用ExecutorService、Callable、Future實現有返回結果的多線程這些在另外一篇java線程池中講述。
3、問題
新聞熱點
疑難解答