多線程執行一些細節

 

停止線程
-----------
1、定義循環結束標記
 .因爲線程運行代碼一般都是循環,只要控制了循環即可
 

2、使用interrupt(中斷)方法
.該方法是結束線程的凍結狀態,使線程回到運行狀態中來

注:stop方法已經過時不再使用

創建線程方式
--------------------
1、Thread
2、Runnable{public void run();}

例子:class Man extends Person implements Runnable{ //Man雖然具備有執行功能了,但它不是線程必須newThread這個參數可以傳遞一個Runnable接口的對象 ———》》new Thread(new Man()).start();如果運行的話還得託付Thread函數
  public void run(){
  .................

  }
}
 new Car().start();
 new Thread(new Man()).start();

 

sleep和監控權沒有任何的關係

------------------------------------
創建線程方式二
-----------------
實現Runnable接口
1、子類覆蓋安接口中的run方法
2、通過Thread類創建線程,並將實現了Runnable接口的子類對象作爲參數傳遞給Thread
類的構造函數

3、Thread類對象調用start方法開啓線程

思考:爲什麼要給Thread類的構造函數傳遞Runnable的子類對象?
答:用一個存在的類具備線程的功效,就不繼承Thread了,只能通過其他的手段加以實現。只能實現一個Runnable接口


重寫方法後才能調用父類的方法即:new一個對象後才行

-------------------------------------------------
線程安全問題
-----------
導致安全問題的出現的原因:
1、多個線程訪問出現延時
2、線程隨機性

注意:線程安全問題在理想狀態下,不容易出現,但一旦出現對軟件的影響是非常大的


-------------
同步(synchronized)

格式:
synchronized(對象){
需要同步的代碼
 
}
同步可以解決安全問題的根本原因就在那個對象上。該對象如同鎖定的功

同步的特點:
-------------
同步的前提:
1、同步需要兩個或者兩個以上的線程
2、多個線程使用的是同一個鎖
未瞞足這兩個條件,不能稱其爲同步

同步的弊端:

當線程相當多時,因爲每個線程都會去判斷同步上的鎖,這是很耗費資源的,無形中會降低程序的運行效率

線程間通信
——————-

思考:wait(),notify(),notifyAll(),用來操作線程爲什麼定義在object類中?

答:1、這些方法存在與同步中。2、使用這些方法時必須要標識所屬的同步的鎖。3、鎖可以是任意對象
所以任意對象調用的方法一定定義object類中。

 

思考2:wait(),sleep()有什麼區別?
wait():釋放cpu執行權,釋放鎖
sleep():釋放cpu執行權,不釋放鎖
yield():等待指定的線程執行完後繼續執行
notify通知去權
併發是同時執行————要考慮到線程的安全性

線程的其他方法 優先級
---------------
1、setPriority(int num)---》》優先級
2、setDaemon(booleanb)———》》守護線程 ———》如果一個程序中都是守護線程的話就會結束了
3、join()--》當子線程運行後再運行主線程,也就是使它們有序進行
4、自定義線程名稱
5、toString ———》是toString方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章