Java執行緒學習筆記(8) 執行緒間通訊

2021-09-13 10:51:34 字數 1991 閱讀 9689

多個執行緒併發執行時, 在預設情況下cpu是隨機切換執行緒的,如果我們希望他們有規律的執行, 就可以使用通訊, 例如每個執行緒執行一次列印

package threadtest;

public

class

demo12

catch

(interruptedexception e)}}

}.start()

;new

thread()

catch

(interruptedexception e)}}

}.start()

;}}class

mytask

system.out.

println

("1.銀行信用卡自動還款任務....");

flag =2;

this

.notify()

;// 喚醒其他執行緒

}public

synchronized

void

task2()

throws interruptedexception

system.out.

println

("2.自動利息結算任務。。。");

flag =1;

this

.notify()

;}}

package threadtest;

public

class

demo12

catch

(interruptedexception e)}}

}.start()

;new

thread()

catch

(interruptedexception e)}}

}.start()

;new

thread()

catch

(interruptedexception e)}}

}.start()

;}}class

mytask

system.out.

println

("1.銀行信用卡自動還款任務....");

flag =2;

// this.notify(); // 喚醒隨機執行緒

this

.notifyall()

;}public

synchronized

void

task2()

throws interruptedexception

system.out.

println

("2.自動利息結算任務。。。");

flag =3;

// this.notify(); // 喚醒隨機執行緒

this

.notifyall()

;}public

synchronized

void

task3()

throws interruptedexception

system.out.

println

("3.簡訊提醒。。。");

flag =1;

// this.notify(); // 喚醒隨機執行緒

this

.notifyall()

;}}

在同步**塊中,用哪個物件鎖,就用哪個物件鎖呼叫wait方法

sleep方法必須傳入引數,引數就是時間,時間到了自動醒來;

wait方法可以傳入引數,可以不傳入引數。傳入引數就是在引數的時間結束後等待,不傳入引數就是直接等待;

sleep方法在同步函式或同步**塊中,不釋放鎖,睡著了也抱著鎖;

wait方法在同步函式或者同步**塊中,釋放鎖

學習筆記 執行緒間同步

執行緒間同步,需要等待。等待對於同步的重要性是不言而喻的。考慮乙個工廠的流水線,假設工序1和工序2沒有關聯,那麼找兩個工人各幹的就可以,這兩個工人都可以不認識對方。現在考慮的重點是工序1和工序2有關聯。那麼兩個工序就需要某種形式的溝通和同步。第一種情況 工序1進行到某個時間點時,需要工序2結束。1 ...

java學習筆記 執行緒

執行緒 多個有序嚴謹的指令集稱之為程式 程式的同時多執行稱之為程序 程式中不同執行路徑稱之為執行緒 多執行緒程式設計簡單 易於共享 效率高 執行緒開始 start 執行緒就緒狀態 執行緒執行 被其他執行緒搶占暫停執行 返回當前就緒 繼續執行 執行緒機率阻塞 訪問網路的時候 死亡狀態 執行緒的生命週期...

JAVA學習筆記 執行緒

執行緒基本控制方法 sleep方法 可以呼叫thread的靜態方法 public static void sleep long millis throws interruptedexception 使當前執行緒休眠 暫時停止執行millis毫秒 由於是靜態方法,sleep可以直接由類名呼叫 thre...