線程:進程在運行過程當中的執行走向,線索
單線程:日過有一條單一線索,存在的問題
效率相對底下java
進程
根據定義,進程爲一個數據結構及能在其上進行的一次操做
他有兩個基本特徵:
1.進程是可用於資源的獨立單位
2.進程同時又是一個可獨立調度和分派的基本單位,這兩個基本實行使之可以獨立運行,也可以併發運行。可是併發運行的時候,系統還須要執行一系列操做:
1.須要建立進程,併爲之分配其所必須的資源
2.撤銷進程,對資源進行回收
3.進程切換數據結構
線程
一個進程中能夠包含一個或多個線程,一個線程是程序內部的一條執行線索。併發
Thread
java的線程經過Thread類來控制,一個Thread類的對象表明一個線程,並且只能表明一個線程
經過Thread類和它定義的對象,咱們能得到當前線程對象,獲取某線程的名稱,能夠實現控制線程暫停一段時間等功能。
每一個線程都是經過某個特定Thread對象所對應的方法run()來完成其操做的,方法run( )成爲操做體
使用Start()方法,線程進入Runable()可運行狀態,它將向線程調度器註冊這個線程
調用Start()方法並不必定立刻執行這個線程ide
在單線程中,main方法必須在run方法返回後才能繼續運行,若是一個類繼承了Thread,那麼必須重寫run()方法
生命週期
新建(new)
就緒(runnable)
運行(running)
阻塞(bolcked)
死亡(dead)線程
繼承thread類,不能在繼承其餘類,優勢是,編寫簡單,能夠直接操縱線程對象
與線程控制有關的方法
start() 新建的進程進入runnable狀態
run() 線程進入running狀態
wait() 線程進入等待狀態
sleep()線程睡眠指定的一段時間
join() 強制加入線程
interrupt 中斷線程
notity()/notilyAll()喚醒其餘的線程繼承
線程的阻塞和解除阻塞
在某一時刻某一個線程在運行一段代碼的時候,這時候另外一個線程也須要運行,可是在運行過程當中的那個線程執行完成以前,另外一個線程是沒法獲取到CPU執行權的(調用sleep方法是進入到睡眠暫停狀態,可是CPU執行權並無交出去,而調用wait方法則是將CPU執行權交給另外一個線程),這個時候就會形成線程阻塞。生命週期
調用sleep放棄佔有資源
調用阻塞式IO方法
等待同步鎖
等待通知
調用Suspend掛起線程進程