進程:當計算機在正常工做時,你在計算機中打開的多個程序,這其中每一個程序就至關於一個進程,CPU分別給他們分配時間片,輪到哪一個程序的時間片時,CPU就去處理他,由於CPU運算速度很是快,因此咱們會認爲程序是同時運行,但實際上CPU是輪流處理相應程序的時間片的,咱們能夠認爲這個是併發的過程。多線程
線程:線程是存在於進程中的,一個進程能夠包含多個線程。併發
線程不是越多越好,由於調用線程也要耗費時間的,若是一個任務執行時間較長那麼可使用多線程,若是一個任務執行時間很短,那麼就使用多線程就得不償失了。spa
通常而言CPU有幾個內核那麼就表明有幾個線程。線程
(單核CPU)併發:當CPU在執行一個任務時候,此時有一個新的任務進來時,CPU會分配給兩個任務時間片,輪流執行兩個任務,JAVA就是支持併發的。進程
(多核CPU)並行:當一個CPU有兩個或兩個以上內核時,那麼CPU能夠一個線程執行一個任務,這樣的兩個任務真正的同時進行被稱爲並行。資源
串行:當系統在執行一個任務時,此時又新增長一個任務,那麼系統執行完當前任務後纔會執行下一個任務,這樣被稱爲串行。it
線程總共有七種狀態循環
sleep方法和notify的區別,sleep方法不會釋放CPU資源,但wait方法會釋放出CPU資源。yield
sleep方法結束後線程繼續往下執行,但wait方法的話須要有notify來喚醒,以後從新進入就緒階段。程序
線程在執行任務時,當該任務須要花較多時間時,此時稱爲阻塞狀態。
通常當IO執行讀取任務時,遇到大文件須要較長時間處理任務此時IO處於阻塞狀態。
run方法和start方法的區別在於調用start方法時線程處於等待就緒狀態,而run方法則是指當CPU處理該線程時候會執行線程中的run方法。
線程的加入使用join方法,指在A線程中插入B線程並要求系統先執行B線程,等B線程結束後再執行A線程。
線程的中斷咱們通常使用三種方法
1 stop該方法是比較舊的方法如今已經不推薦使用。
2 使用死循環而後設置相應的標記當知足條件時跳出循環。
3 interrupt方法
yield方法是該線程先讓出CPU資源讓其餘線程先處理,本身重回就緒狀態等待CPU下次執行它。