wait notify 實現多執行緒交叉備份

2021-09-20 09:17:02 字數 1530 閱讀 5506

建立20個執行緒,其中10個執行緒是將資料備份到 a 資料庫中,另外10 個執行緒將資料備份到 b 資料庫中,並且備份 a 資料庫和 備份 b 資料庫的是交叉執行的。

1、實現備份 a 資料庫和備份 b 資料庫的 task。

/**

* description: 當flag=true的時候備份 a 資料庫

* 當flag=false的時候備份 b資料庫 以此實現交叉備份 */

public

class

taskbackup

system.out.println(thread.currentthread().getname()+"正在備份 a 資料庫!");//模擬備份資料庫

flag=false

;

this.notifyall();//

喚醒所有等待的執行緒,當然這裡並不會喚醒backupa 的執行緒,原因在於,backupa的執行緒這個時候又做了乙個while判斷,導致執行緒繼續在等待了,而只有backupb的執行緒被喚醒了

} catch

(interruptedexception e)

}synchronized

public

void

backupb()

system.out.println(thread.currentthread().getname()+"正在備份 b 資料庫!");//模擬備份資料庫

flag=true

; this

.notifyall();

} catch

(interruptedexception e)

} }

2、分別建立執行緒執行 備份任務

public

class threadbackupa extends

thread

@override

public

void

run()

}

public

class threadbackupb extends

thread

@override

public

void

run()

}

3、執行任務檢視結果

覺得這個例子寫得特別棒,所以特地記錄了一下。它把 諸如 執行緒notify過程中 wait條件發生改變、同類喚醒同類導致的「假死」問題 等,都做了乙個很好的概括應用和解決。筆主資歷尚淺,說的不好的地方,還請不吝指教,謝謝!

wait notify 實現多執行緒交叉備份

建立20個執行緒,其中10個執行緒是將資料備份到 a 資料庫中,另外10 個執行緒將資料備份到 b 資料庫中,並且備份 a 資料庫和 備份 b 資料庫的是交叉執行的。1 實現備份 a 資料庫和備份 b 資料庫的 task。description 當flag true的時候備份 a 資料庫 當flag...

Java多執行緒wait,notify例項

package com.lj.thread2 public class sample catch interruptedexception e number system.out.println number increased by thread.currentthread getname num...

java多執行緒之wait notify

wait 方法作用 呼叫wait 方法後,當前執行緒休眠,且釋放其占有的物件鎖。notify 方法作用 呼叫notify 方法後,喚醒乙個正在等待當前物件鎖的執行緒,賦予其物件鎖。notify all 方法作用 呼叫notify 方法後,喚醒所有正在等待當前物件鎖的執行緒。以上三個方法均為objec...