線程所踊,有時被稱為輕量級進程(Lightweight Process,LWP)恼布,是程序執(zhí)行流的最小單元螺戳。一個標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC)折汞,寄存器集合和堆棧組成倔幼。另外,線程是進程中的一個實體爽待,是被系統(tǒng)獨立調(diào)度和分派的基本單位损同,線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源鸟款,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源膏燃。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行何什。由于線程之間的相互制約组哩,致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒,阻塞,和運行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運行的所有條件禁炒,邏輯上可以運行而咆,在等待處理機;運行狀態(tài)是指線程占有處理機正在運行幕袱;阻塞狀態(tài)是指線程在等待一個事件(如某個信號量)暴备,邏輯上不可執(zhí)行。每一個程序都至少有一個線程们豌,若程序只有一個線程涯捻,那就是程序本身毯盈。線程是程序中一個單一的順序控制流程竿秆。
進程內(nèi)一個相對獨立的、可調(diào)度的執(zhí)行單元末早,是系統(tǒng)獨立調(diào)度和分派CPU的基本單位指運行中的程序的調(diào)度單位辩尊。在單個程序中同時運行多個線程完成不同的工作涛浙,稱為多線程.
1.線程的創(chuàng)建
官方doc給出兩種方式:
There are two ways to create a new thread of execution.
One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started。
The other way to create a thread is to declare a class that implements the Runnable interface. That class then implements the run method. An instance of the class can then be allocated, passed as an argument when creating Thread, and started.
2.線程生命周期
3.總結(jié)
- Java應(yīng)用程序的main函數(shù)就是一個線程摄欲,是被jvm啟動的時候調(diào)用的轿亮,只不過線程的名字叫main。
- 實現(xiàn)一個線程胸墙,必須創(chuàng)建Thread實例我注,override run方法,并且調(diào)用start方法迟隅。
- 在jvm啟動后實際上有多個線程但骨,但是至少有一個非守護線程。
- 當(dāng)你調(diào)用一個線程的start方法的時候智袭,此時至少有兩個線程奔缠,一個是調(diào)用你的線程,還有一個當(dāng)前線程补履。
- 線程的生命周期分為new添坊,runnable,running箫锤,block,terminated雨女。