建立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=true2、分別建立執行緒執行 備份任務; this
.notifyall(); }
catch
(interruptedexception e) } }
publicclass threadbackupa extends
thread
@override
public
void
run()
}
public3、執行任務檢視結果class threadbackupb extends
thread
@override
public
void
run()
}
覺得這個例子寫得特別棒,所以特地記錄了一下。它把 諸如 執行緒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...