線程多線程
1.兩種建立線程的方式都有自身的優勢。spa
實現 Runnable 接口的優勢:線程
從面向對象的設計觀點看,Thread 類嚴格來說是一個虛擬CPU 的封裝,所以只有要改變或擴展該CPU 模型的行爲時才應該繼承這個類。設計
繼承Thread 的缺點是:Java 只容許單繼承,若是已經繼承了Thread 類,則不能再繼承其餘類例如JFrame,這使得一些狀況下不得不採用實現Runnable 的方法。對象
2.線程的優先級繼承
默認狀況下,線程的優先級是5 也就是Thread.NORM_PRIORITY。值得注意的是,即便當您爲一個線程(線程A)指定最高優先級,另外一個線程(線程B)指定最低優先級,運行程序的時候,線程A 也不是必定優先於線程B 執行的。線程的優先級只是代表在相同狀況下,優先級高的線程有更大的概率搶佔CPU。接口
3. 線程的基本控制ci
A.sleep get
a.sleep 方法使當前線程(即調用該方法的線程)暫停執行一段時間,讓其餘線程有機會繼續執行,但它並不釋放對象鎖。也就是若是有synchronized 同步塊,其餘線程仍然不一樣訪問共享數據。注意該方法要捕獲異常。
b.即便當一個線程設置爲最高優先級,當它調用sleep 會終止一段時間,低優先級的線程反而有機會先執行:
4.多線程的兩種使用方式:
A.使用Runnable
構建一個Runnerable接口的實現類,類中實現它的run方法
再new一個thread對象 將runnerable對象做爲參數放入其中
B. 使用thread
構建一個thread的繼承類,類中實現它的run方法
而後,利用多態性:Thread t1 = new MyThread1();
最後,thread對象.star();【t1.star()】
5. join 方法
執行join方法的線程必須所有都運行玩才能運行其餘的線程。
join 方法使調用該方法的線程在此以前執行完畢,也就是等待調用該方法的線程 執行完畢後再往下繼續執行。注意該方法也要捕獲異常。