多線程和Timer類

                   [10]多線程和Timer類


一.多線程

*** 1.創建線程

  • a.定義一個類繼承Thread類, 重寫run()方法, 創建該類對象, 調用start()方法. 

  • 程序會開啓一條新線程, 在新線程上自動調用run()方法.

  • b.定義一個類實現Runnable接口, 實現run()方法, 創建Thread對象, 構造函數中傳入Runnable對象, 調用start()方法. 

  • 程序會開啓一條新線程, 在新線程上自動調用Runnable的run()方法.

2.Thread類常用方法

  • a.currentThread()

  • 獲取當前線程對象

  • b.getName()

  • 獲取線程的名字

  • c.setName(String)

  • 設置線程的名字

  • d.sleep(long)

  • 控制線程休眠指定毫秒

  • e.setDaemon(boolean)

  • 設置線程爲後臺(守護)線程, 後臺線程不會單獨執行. 注意, 必須在線程開啓之前設置.

  • f.join()

  • 當前線程暫停, 指定線程加入, 等待指定線程執行結束, 當前線程繼續

* 3.同步

  • a.同步代碼塊

  • 使用synchronized(鎖對象){ 同步代碼 }方式定義同步代碼塊

  • 多個同步代碼塊如果使用相同的鎖對象, 那麼同一時間內只能執行一個

  • b.同步方法

  • 如果整個方法內的代碼都需要同步, 那麼可以在方法聲明上加上synchronized

  • 在同一個對象上的同步方法, 同一時間只能執行一個

  • 同步方法默認使用this作爲鎖對象

  • 如果希望同步方法和同步代碼塊進行同步, 那麼同步代碼塊也要自劃定鎖對象爲this

  • c.什麼時候用同步

  • 兩個線程在執行兩段代碼的時候, 其中一段代碼執行的過程中不希望CPU切換到另一段代碼.

  • 可以將兩段代碼放在同步代碼塊中, 使用相同的鎖對象, 這樣同一時間內只能執行一段代碼.

  • d.線程安全問題

  • 當多個線程併發訪問同一數據, 有可能出現線程安全問題.

  • 這時就可以使用同步技術來解決, 將訪問數據的代碼放在同步代碼塊中, 這樣做同一時間只能有一條線程訪問數據.

  • e.死鎖

  • 在多線程併發執行的時候, 儘量避免多層同步代碼嵌套使用, 有可能互相沖突, 造成死鎖

4.通信

  • a.等待

  • 使用鎖對象的wait()方法進行等待

  • b.喚醒

  • 使用鎖對象的notify()方法進行喚醒, 該方法是喚醒隨機一個線程

  • 使用notifyAll()方法可以喚醒所有等待的線程

5.JDK5的同步

  • 使用ReentrantLock類創建一個鎖對象, 在需要同步的代碼前執行lock()方法, 同步結束的地方unlock()

6.JDK5的通信

  • 使用ReentrantLock可以調用newCondition()方法創建Condition對象

  • 使用Condition對象await()方法可以控制當前線程等待

  • 使用Condition對象的signal()方法可以喚醒指定的線程


二.Timer類

1.創建計時器

  • Timer timer = new Timer();

2.安排任務

  • schedule(TimerTask task, long delay) 

  • 安排一個任務, 等待delay毫秒後執行

  • schedule(TimerTask task, long delay, long period) 

  • 安排一個任務, 等待delay毫秒後執行, 每隔period毫秒再執行

  • schedule(TimerTask task, Date time) 

  • 安排一個任務, 等待time時間開始執行

  • schedule(TimerTask task, Date firstTime, long period) 

  • 安排一個任務, 等待firstTime時間開始執行, 每隔period毫秒再執行


834344afa40f4bfbdfe00520014f78f0f7361856        修改鼠標懸浮提示


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