線程:線程是比進程更小的執行單位,一個進程在其執行過程當中,能夠產生多個線程,造成多條執行線索,每條線索,即每一個線程也有自身的產生、存在和消亡的過程。java
進程:進程是程序的一次動態執行過程,對應了從代碼加載、執行至執行完畢的一個完整過程,這個過程也是進程自己從產生、發展至消亡的過程。git
主線程:該線程負責執行main方法。多線程
建立線程:用Thread的子類建立線程對象;直接使用Thread類建立線程對象,構造方法是Thread(Runnable target)。學習
線程的經常使用方法:線程
start() 線程調用該方法將啓動線程;設計
run() 用來定義線程對象被調度以後所執行的操做;rest
sleep(int millsecond) 使優先級別高的線程放棄CPU資源,休眠一段時間。必須在try-catch語句塊中調用sleep方法;對象
isAlive() 線程處於「新建」狀態時,線程調用isAlive()方法返回false。在線程的run()方法結束以前,即沒有進入死亡狀態以前,線程調用isAlive()方法返回true。當線程進入死亡狀態後,線程調用方法isAlive(),此時的返回值爲false。blog
wait()方法能夠中斷方法的執行,使本線程等待,暫時讓出CPU的使用權,並容許其它線程使用這個同步方法進程
notifyAll()方法通知全部的因爲使用這個同步方法而處於等待的線程結束等待。曾中斷的線程就會從剛纔的中斷處繼續執行這個同步方法,並遵循「先中斷先繼續」的原則
notify()方法只是通知處於等待中的線程的某一個結束等待
線程聯合:一個線程A在佔有CPU資源期間,可讓其它線程調用join()和本線程聯合AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪製到桌面
B.join()
若準備聯合的B線程已經執行結束,則B.join()不會產生任何效果
使用Timer類的方法start()啓動計時器,即啓動線程。使用Timer類的方法stop()中止計時器,即掛起線程,使用restart()從新啓動計時器,即恢復線程
守護線程:一個線程調用void setDaemon(boolean on)方法能夠將本身設置成一個守護(Daemon)線程
thread.setDaemon(true);
當程序中的全部用戶線程都已結束運行時,即便守護線程的run方法中還有須要執行的語句,守護線程也馬上結束運行
GUI線程:當JAVA程序包含圖形用戶界面(GUI)時,JAVA虛擬機在運行應用程序時會自動啓動更多線程,其中AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪製到桌面。
(statistics.sh腳本的運行結果截圖)