官术网_书友最值得收藏!

1.1 無處不在的線程

進程(Process)代表運行中的程序。如果我們把程序比作劇本,那么進程就是劇本對應的實際演出(比如,電影演出)。一個運行的Java程序就是一個進程。從操作系統的角度來看,線程(Thread)是進程中可獨立執行的子任務。一個進程可以包含多個線程,同一個進程中的線程共享該進程所申請到的資源,如內存空間和文件句柄等。從Java虛擬機的角度來看,線程是進程中的一個組件(Component),它可以看作執行Java代碼的最小單位。Java程序中的任何一段代碼總在某個確定的線程中執行。Java虛擬機啟動的時候會創建一個main線程,該線程負責執行Java程序的入口方法(main方法)。如清單1-1所示的代碼展示了Java程序中的代碼總是由某個確定的線程運行的。

清單1-1 Java代碼的執行線程

如清單1-1所示的程序運行時輸出如下:

從上面的輸出可以看出,類JavaThreadAnywhere的main方法以及類Helper的doSomething方法都是由main方法負責執行的。

在多線程編程中,弄清楚一段代碼具體是由哪個(或者哪種)線程去負責執行的很重要,這關系到性能問題、線程安全問題等。本書在后續章節中會體現這點。

Java中的線程可以分為守護線程(Daemon Thread)和用戶線程(User Thread)。用戶線程會阻止Java虛擬機的正常停止[1],即Java虛擬機正常停止前應用程序中的所有用戶線程必須先停止;否則Java虛擬機無法停止。而守護線程則不會影響Java虛擬機的正常停止,即應用程序中有守護線程在運行也不影響Java虛擬機的正常停止。因此,守護線程通常用于執行一些重要性不是很高的任務,例如,監視其他線程的運行情況的任務。

主站蜘蛛池模板: 龙南县| 南溪县| 茌平县| 息烽县| 菏泽市| 延长县| 卫辉市| 三江| 桐乡市| 原阳县| 南岸区| 南木林县| 盘锦市| 红安县| 都江堰市| 南和县| 靖西县| 嘉黎县| 馆陶县| 河北区| 太仆寺旗| 明溪县| 竹溪县| 广汉市| 贵溪市| 桦南县| 渭源县| 思茅市| 丽江市| 大竹县| 永康市| 沐川县| 泸溪县| 石河子市| 洛川县| 翁源县| 郓城县| 正蓝旗| 钦州市| 木里| 剑河县|