1 實現方式
線程的實現有2種方式:
繼承Thread;
實現Runnable;(推薦使用)
2 實現Runnable好處
將線程的任務從線程的子類中分離出來,進行了單獨的封裝。按照面向對象的思想將任務封裝成對象。
避免了Java單繼承的侷限性;
爲後期的代碼功能擴展性提供便利。
3 兩種線程方式區別
繼承Thread:線程代碼存放Thread子類run方法中;
實現Runnable,線程代碼存在接口的子類的run方法;
在多線程中,Thread爲多個線程對象,而Runnable只有一個Runnable對象。
4 線程安全問題的產生原因
多線程在操作共同數據;
操作共享數據的代碼有多條。
5 解決安全問題
1 思路
就是將多條操作共享數據的代碼進行封裝,當有線程執行這些代碼的時候,其他的線程不可參與其中。
2 解決方案
使用synchronized關鍵字。
同步代碼塊:鎖對象爲Obj;建議使用。
非靜態同步函數:this,當前類對象;
靜態同步函數:XXX.class 該函數所屬字節碼文件對象,不可以用getClass()表示(非靜態方法,不可用在靜態方法中)。
6 同步的利弊
好處:解決了線程的安全問題;
弊端:佔用CPU內存資源,多次判斷鎖,相對效率低,但在可接受範圍之內;
7 同步的前提
必須有多線程同時使用一個公共資源。