進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.多線程
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.異步
2.多線程是異步的,線程被調用的時機是隨機的。一個進程運行時至少有一個線程在運行。執行start方法的順序不表明線程啓動的順序。spa
3.在建立新線程時繼承 Thread 類最大的侷限是單繼承。線程
4.自定義線程中的實例變量針對其餘線程有共享與不共享之分。對象
5.synchronized 能夠在任意對象及方法上加鎖,而加鎖的代碼稱爲"互斥區"或"臨界區"。繼承
6.當一個線程想要執行同步方法裏面的代碼時,線程首先嚐試去拿這把鎖,若是能拿到這把鎖,那麼線程就能夠執行synchronized裏的代碼了。若是拿不到,那麼這個線程就會不斷的嘗試拿這把鎖,直到拿到爲止,並且是多個線程同時去搶這把鎖。進程
7.currentThread()能夠返回代碼正在被哪一個 線程調用。資源
8.isAlive()是判斷當前的線程是否處於活動狀態。活動狀態:就是線程已經啓動且還沒有終止。get
9.sleep()的做用是指定的毫秒數讓當前"正在執行的線程"休眠(暫停執行)。當前正在執行的線程是值Thread.currentThread獲取的。同步
10.getId()方法的做用是獲取線程的惟一標識.
11.Thread.interrupted():判斷當前線程是不是中止狀態。具備清除狀態的功能。
12. xxx.isInterrupted():判斷線程對象是否已是中斷狀態,但不清除狀態標識。
13.線程的中止方法:
1.異常法:在須要中止線程的地方拋出異常便可終止該線程。
2.在線程sleep() 狀態下中止線程。
3.使用stop()方法(已被廢棄)。
14.暫停線程:suspend()方法暫停線程,resume()方法恢復線程。
suspend()和resume()的缺點:極容易形成公共的同步對象形成獨佔,使其餘的線程沒法訪問公共同步對象。在使用suspend()和resume()時也容易出現線程暫停而致使數據不一樣步的狀況。
15.yield()方法:放棄當前的CPU資源,將它讓給其餘的任務去佔用CPU執行時間。當放棄的時間不肯定。
16.線程的優先級:CPU優先執行優先級較高的線程對象中的任務。線程優先級有助於幫"線程規劃器"肯定下次選擇哪個線程來優先執行。
經過setPriority()方法來設置線程的優先級別。
MIN_PRIORITY = 1;NORM_PRIORITY = 5;MAX_PRIORITY = 10;
線程的優先級具備繼承性,好比A線程啓動了B線程,則B線程的優先級與A線程時同樣的。
優先級具備規則性,優先級具備隨機性。
17.線程分爲2種,一種是用戶線程,一種是守護線程。當進程中不存在非守護線程了,則守護線程自動銷燬。典型的守護線程就是垃圾回收線程。