今天覆習了下關於多線程方面的知識具體以下html
一>>多線程的建立分別:①繼承Thread類②實現Runable接口java
經常使用方法有安全
1.start();啓動線程並執行相應的run方法多線程
2.run();子線程要執行 的代碼放入run()方法中this
3.currentThread();靜態的調取當前的線程線程
4.getname();獲取線程名字htm
5.setname();設置此 線程的名字對象
6.yield();調用此方法的線程釋放當前cpu的執行權blog
7.join();在A線程中調用B線程 join()方法繼承
8.isalive();判斷此線程是否還存活
9.sleep();讓當前線程睡眠多少毫秒
二>>對比一下繼承的方式和實現的方式
實現的方式優於繼承
1.實現的方式避免了單繼承的侷限性
2.若是多個線程要操做同一份資源(或數據)更適合用實現的方式 同時共享數據所在的類能夠做爲Runable接口的實現類
三>>線程安全問題出現的緣由
因爲一個線程在操做共享數據過程當中未執行完畢的狀況下,另外的線程參與進來,致使共享數據存在安全問題。
四>>如何解決線程安全問題
必須讓一個線程操做共享數據完畢後其餘線程纔有機會參與共享的操做
五>>java如何實現線程的安全>線程的同步機制
方式一:同步代碼塊
synchronized(同步監視器){
須要被同步的代碼塊(即爲操做共享數據的代碼)
}
1.共享數據:多個線程共同操做的同一個數據量(變量)
2.同步監視器:由一個類對象來充當, 哪一個線程獲取監視器誰就執行大括號裏被同步的代碼,俗稱鎖 。要求全部的線程必須公用同一把鎖。
注意:在實現的方式中,考慮同步問題的話可使用this。可是在繼承的方式中慎用this
方式二:同步方法
將操做共享數據的方法聲明爲synchronized既此方法認爲同步方法
可以保證當其中一個線程執行此方法時其餘線程在外等候直至此線程執行完此方法。
同步方法的鎖:this(既當前對象)
對於靜態方法若是使用同步默認的鎖爲當前類自己,以單列的懶漢式爲例(singleton.class)
六>>線程同步的弊端
因爲同一個時間只能有一個線程訪問共享數據效率變低了。
七>>線程通訊
三個關鍵詞:wait():一旦一個線程執行到wait(),就釋放當前的鎖
notify(),notifyall();喚醒wait()的一個或全部的線程
線程通訊必須在同步代碼塊中 ,wait等待,notify解除。
原文出處:https://www.cnblogs.com/itcores/p/10352977.html