乙個類物件作為另乙個類的屬性,
你可以通過建構函式的形式傳遞進來。就是說當你想在乙個類a中使用另乙個類b的資料時,可以在該類a中定義b的物件b作為a的屬性,再把b作為乙個引數構造乙個建構函式,這樣就可以實現引數的傳遞,可以在類a中使用b的資料了(如果沒有理解錯應該是這樣子的意思)。
void wait()
使當前執行緒放棄同步鎖並進入等待狀態,直到其他執行緒進入此同步鎖,並呼叫notify()方法,或notifyall()方法喚醒該執行緒為止
void notify()
喚醒此同步鎖上等待的第乙個呼叫wait()方法的執行緒
viod notifyall()
喚醒此同步鎖上呼叫wait()方法的所有執行緒
多執行緒通訊利用wait()、notify()、notifyall()使得執行緒使多個執行緒按照一定的順序輪流執行。
注意:這三個方法的呼叫者都應該是同步鎖物件。
package study;
class storage
cells[inpos]=num;
system.out.println("在cells["+inpos+"]中放入資料---"+cells[inpos]);
inpos++;
if(inpos==cells.length)
inpos=0;
count++;
this.notify();
} catch (interruptedexception e)
}public synchronized void get()
int data=cells[outpos];
system.out.println("從cells["+outpos+"]中取出資料"+data);
cells[outpos]=0;
outpos++;
if(outpos==cells.length)
outpos=0;
count--;
this.notify();
} catch (interruptedexception e) }}
class input implements runnable
@override
public void run() }}
class output implements runnable
@override
public void run() }}
public class example17
}結果:
出現問題:
傳入put()的引數num初始值應該是0,不知道為什麼不能從0開始,即使是在定義屬性值num時賦值num=0也同樣不可以,找不出問題所在。
還有乙個問題是,wait()和notify()的定義中說」其他執行緒進入此同步鎖「,對於這點,目前的理解是這樣子的,不知道有沒有理解錯:
物件鎖是基於呼叫被synchronized修飾的方法所在的物件層次來講的,並不是之前理解的那樣是基於被synchronized修飾的方法的,同乙個類中會有兩個或者多個被synchronized修飾的方法,是為了使這兩個方法同步,所謂同步就是某個資源在同一時間內只能被乙個執行緒訪問。這裡的資源應該就是乙個物件鎖(應該可以這麼理解吧),被synchronized修飾的兩個或者多個方法是物件鎖內的同步的方法,不管多個執行緒利用同步方法中的哪個方法,只能有乙個執行緒占用該物件所。
執行緒通訊,多執行緒
多執行緒 thread handler thread處理一些複雜的業務邏輯 耗時的事情 handler在主線程中接收訊息的乙個物件 mhandler.sendmessage msg 傳送乙個訊息物件 mhandler.sendemptymessage what 傳送空訊息,只有what沒有obj m...
多執行緒 執行緒通訊
總結 今天小鹹兒來講解乙個好玩的事,那就是執行緒之間該如何通訊,執行緒通訊之後又會出現什麼問題?先來一張導圖來看看執行緒通訊的分布?疑問 如果想要執行緒按照使用者自定義的順序執行的話,那該如何操作呢?思考 如果能夠讓執行緒等待先執行的執行緒執行完,再執行不就能達到效果了嗎!果然出現問題之後,就會有對...
多執行緒 執行緒通訊
1.使用wait notify方法實現執行緒之間的通訊 1 有其他執行緒呼叫同乙個物件的notify或者notifyall方法 呼叫notify notifyall方法之前 2 被喚醒之後重新獲得物件的鎖 呼叫notify notifyall方法之後 編寫測試 如下 執行結果 2.管道通訊 管道流主...