/**
* @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 為併發而生...