執行緒間通訊,把乙個資料儲存空間劃分為兩個部分:一部分用於儲存人的姓名,另一部分用於儲存人的性別。這裡包含的執行緒有兩個:乙個執行緒向資料儲存空間新增資料(生產者),另乙個執行緒從資料儲存空間中取出資料(消費者),這種程式需要有兩種意外考慮:1、假設生產者執行緒剛向資料儲存空間中新增乙個人姓名,還沒有加入這個人的性別,cpu就切換到消費者執行緒,消費者則把這個人的姓名和上乙個人的性別聯絡了一起,2、生產者放入若干次資料,消費者才開始取資料,或者,消費者取完乙個資料後,還沒有等生產者放入新的資料,又重複取出已經取出過的資料
以上兩個考慮都沒有考慮到資料的同步問題,資源不同步會導致資料訪問之間的錯誤,下面的**是解決問題的小例子,參考
package com.liangbo;
public class threadcommunation
}//宣告乙個p類
class p
catch(interruptedexception e)
}this.name = name;
trycatch(exception e)
this.*** = ***;
bfull = true;
notify();
} //get方法,並實現類了的封裝
public synchronized void get()
catch(interruptedexception e)
}system.out.println(name+"---->"+***);
"---->"+this.***);
bfull = false;
notify(); }
}//宣告乙個含有runnable多執行緒的類producer(生產)
class producer implements runnable
//宣告乙個公共方法run
public void run()
else
i= (i+1)%2;
} }}//宣告乙個產出類,實現多執行緒介面
class consumer implements runnable
public void run() }
}
執行緒間通訊
執行緒間通訊 多個執行緒在操作統一資源,但各個執行緒操作的動作不同。資源 class res class input implements runnable public void run else x x 1 2 class output implements runnable public vo...
執行緒間通訊
執行緒間的通訊 在乙個多執行緒的應用程式中,所有執行緒共享程序資源,協同工作。所以,執行緒之間的通訊是編寫多執行緒 應用的必不可少的環節。執行緒之間的通訊包括互斥 同步等,它是多 執行緒設計中最難控制的部分,也是關鍵部分。執行緒間的互斥 1 臨界區 在乙個多執行緒 的應用程式中,可能存在這樣的危險 ...
執行緒間通訊
執行緒間通訊 其實就是多個執行緒在操作同乙個資源 但是操作的動作不同。等待喚醒機制 wait notify 0 notifyall 都使用在同步中,因為要對持有監視器 鎖 的執行緒操作。所以要使用在同步中,因為只有同步才具有鎖 為什麼這些操作執行緒的方法要定義object類中呢?因為這些方法在操作同...