您好,登錄后才能下訂單哦!
小編給大家分享一下Object類wait及notify方法的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
Object類中的wait和notify方法(生產(chǎn)者和消費者模式) 不是通過線程調(diào)用
生產(chǎn)者和消費者模式 生產(chǎn)線程和消費線程達(dá)到均衡
wait方法和notify方法建立在synchronized線程同步的基礎(chǔ)之上
實現(xiàn)生產(chǎn)者和消費者模式 倉庫容量為10
代碼如下
import java.util.ArrayList; public class Test_14 { public static void main(String[] args) { ArrayList list = new ArrayList(); Thread t1 = new Thread(new ProducerThread(list)); t1.setName("producer"); Thread t2 = new Thread(new ConsumerThread(list)); t2.setName("consumer"); t1.start(); t2.start(); } } //生產(chǎn)者線程 class ProducerThread implements Runnable{ private ArrayList arrayList; public ProducerThread(ArrayList arrayList) { this.arrayList = arrayList; } @Override public void run() { while (true) { synchronized (arrayList) { if (arrayList.size() > 9){ try { arrayList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } arrayList.add(new Object()); System.out.println(Thread.currentThread().getName() + "---> 生產(chǎn)" + "---庫存" + arrayList.size()); arrayList.notify(); } } } } //消費者線程 class ConsumerThread implements Runnable{ private ArrayList arrayList; public ConsumerThread(ArrayList arrayList) { this.arrayList = arrayList; } @Override public void run() { while (true){ synchronized (arrayList){ if (arrayList.size() < 9){ try { arrayList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } arrayList.remove(0); System.out.println(Thread.currentThread().getName() + "---> 消費" + "---庫存" + arrayList.size()); arrayList.notify(); } } } }
看完了這篇文章,相信你對Object類wait及notify方法的案例分析有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。