一:進程與線程的區別
進程是資源分配的最小單位,線程是資源調度的最小單位。一個程序的生命週期,對應着進程的創建,運行,中止。進程擁有獨立的地址空間,同一進程下的多個線程共享進程的地址空間。
二:線程的生命週期
如上圖所示,線程有6個狀態:分別是新建狀態,就緒狀態,運行狀態,阻塞狀態,等待狀態,超時等待狀態,中止狀態。
新建狀態:當new一個線程對象時,此時線程出於新建狀態(Thread t=new Thread();)。
(就緒狀態,運行狀態):t.start(),當執行start()方法此時線程處於就緒,當線程獲取的cpu的時間片時,此時線程處於運行狀態。(Java將操作系統中線程的就緒與運行合併爲運行狀態)
阻塞狀態:當多個線程競爭鎖時,沒有競爭到鎖的線程會處於阻塞狀態。
等待狀態:線程運行中調用wait(),join()方法處於等待狀態。
超時等待:線程運行中調用sleep(time),wait(time)方法時會處於超時等待狀態。
中止狀態:當線程執行完run()方法後線程會生命週期會結束。
三:線程的創建方法
java創建線程有三種方式。
繼承Thread類,實現Runable接口,實現Callable接口(可以實現回調)
在生產環境中用的最多的是通過線程池執行線程任務。
四:總結
線程概念這部分比較簡單,主要是瞭解線程生命週期的各個狀態之間的轉換,在生產環境dump線程信息時,便於定位問題。