- Java多線程編程實戰指南:設計模式篇(第2版)
- 黃文海
- 600字
- 2021-10-15 19:24:51
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虛擬機的正常停止。因此,守護線程通常用于執行一些重要性不是很高的任務,例如,監視其他線程的運行情況的任務。
推薦閱讀
- Elastic Stack應用寶典
- 征服RIA
- HTML5入門經典
- INSTANT Passbook App Development for iOS How-to
- Python忍者秘籍
- PHP 7+MySQL 8動態網站開發從入門到精通(視頻教學版)
- OpenGL Data Visualization Cookbook
- SQL 經典實例
- Learning Unreal Engine Android Game Development
- Extending Unity with Editor Scripting
- 零基礎學C++(升級版)
- PostgreSQL 12 High Availability Cookbook
- 一覽眾山小:ASP.NET Web開發修行實錄
- 趣學數據結構
- Raspberry Pi開發實戰