咱們如今使用的操做系統都是多任務操做系統,每一個運行的任務就是操做系統所作的一件事情,好比咱們在和別人聊QQ時還能夠一邊聽着歌,通常來講一個任務對應着一個進程,也有可能包含多個進程。java
線程是進程中的實體,一個進程能夠擁有多個線程,一個線程必須有一個父進程。線程不擁有系統資源,只有運行必須的一些數據結構;它與父進程的其它線程共享該進程所擁有的所有資源。進程能夠建立和撤消線程,從而實現程序的併發執行。通常,線程具備就緒、阻塞和運行三種基本狀態。多線程的目的是爲了最大限度的利用CPU資源。安全
同一進程的裏多個子線程看似能夠同步進行,其實不是同步的(因爲CPU在同一時間內只能處理一個線程),他們能夠訪問父線程的資源與對象,這樣一來的優勢是能夠實現子線程與子線程之間的通訊而且能夠節省內存空間,沒必要爲每一個子線程從新分配內存空間。但缺點是容易使得數據混亂,線程不安全。
數據結構
java線程的建立與啓動多線程
1、線程建立的方法併發
一、擴展java.lang.Thread類。spa
二、實現java.lang.Runnable接口。操作系統
2、啓動進程線程
調用start()方法。對象
在調用start()方法以前:線程處於新狀態中,新狀態指有一個Thread對象,但尚未一個真正的線程。接口
在調用start()方法以後:
啓動新的執行線程(具備新的調用棧);
該線程重新狀態轉移到可運行狀態;
當該線程得到機會執行時,其目標run()方法將運行。