併發程式設計 生產者消費者3種方式

2021-10-01 19:27:46 字數 2458 閱讀 7694

/**

* @author i

* @create 2019/12/29 14:57

* @description 生產者消費者 1 版本

*/class mysharedata

count++;

system.out.println(thread.currentthread().getname()+" 生產了乙個"+count);

this.notify();

}public synchronized void decrement()throws exception

count--;

system.out.println(thread.currentthread().getname()+" 消費了乙個"+count);

this.notify();

}}public class producterandcustomer01 catch (exception e)

}},"t1").start();

//消費者

new thread(()-> catch (exception e)

}},"t2").start();

}}

lock 替代了 synchronized 方法和語句的使用,condition 替代了 object 監視器方法的使用

/**

* @author i

* @create 2019/12/29 15:04

* @description 生產者 消費者 2版本

* lock 替代了 synchronized 方法和語句的使用,condition 替代了 object 監視器方法的使用

* */

class mysharedata

count++;

system.out.println(thread.currentthread().getname() + " 生產了乙個" + count);

condition.signal();

} catch (exception e) finally

}//消費

public void decrement() throws exception

count--;

system.out.println(thread.currentthread().getname() + " 消費了乙個" + count);

condition.signal();

} catch (exception e) finally

}}public class producterandcustomer02 catch (exception e)

}}, "t1").start();

//消費者

new thread(() -> catch (exception e)

}}, "t2").start();

}}

版本1中通過syn來保證原子操作,但是鎖的粒度比較大。重量級。使用notify和wait 並且不確定喚醒哪乙個執行緒有一定的隨機性。

版本2中使用lock 和 condition來進行控制

版本3 使用volatile blockingqueue atomicinteger 來實現組合使用

/**

* @author i

* @create 2019/12/29 16:42

* @description 生產者消費者 volatile/blockingqueue/atomicinteger

* */public class prodconsumer_blockqueuedemo

//生產者

public void pro() throws interruptedexception

system.out.println(thread.currentthread().getname()+" boss叫停了服務 生產者退出。。。");

}//消費者

public void con()throws exception

system.out.println(thread.currentthread().getname()+" \t 消費了 "+str);}}

public void stop()

public static void main(string args) throws interruptedexception catch (exception e)

},"p").start();

new thread(()-> catch (exception e)

},"c").start();

timeunit.seconds.sleep(5);

p.stop();

}}

生產者消費者的3種實現方式

一 使用synchronized wait notify實現生產者,消費者模式 public class producerconsumerwaitnofityall class producer1 implements runnable public void run catch interrupt...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

golang 併發程式設計之生產者消費者

golang 最吸引人的地方可能就是併發了,無論 的編寫上,還是效能上面,golang 都有絕對的優勢 學習乙個語言的併發特性,我喜歡實現乙個生產者消費者模型,這個模型非常經典,適用於很多的併發場景,下面我通過這個模型,來簡單介紹一下 golang 的併發程式設計 協程go golang 為併發而生...