多线程学习九:煮茶算法
閱讀華羅庚《統(tǒng)籌方法》,給出燒水泡茶的多線程解決方案,提示
參考圖二,用兩個線程(兩個人協(xié)作)模擬燒水泡茶過程
文中辦法乙、丙都相當(dāng)于任務(wù)串行
而圖一相當(dāng)于啟動了 4 個線程,有點浪費
用 sleep(n) 模擬洗茶壺、洗水壺等耗費的時間
附:華羅庚《統(tǒng)籌方法》
統(tǒng)籌方法,是一種安排工作進(jìn)程的數(shù)學(xué)方法。它的實用范圍極廣泛,在企業(yè)管理和基本建設(shè)中,以及關(guān)系復(fù)
雜的科研項目的組織與管理中,都可以應(yīng)用。
怎樣應(yīng)用呢?主要是把工序安排好。
北京市昌平區(qū)建材城西路金燕龍辦公樓一層 電話:400-618-9090
洗水壺 1分鐘 燒開水 15分鐘
洗茶壺 1分鐘
洗茶杯 2分鐘
拿茶葉 1分鐘
泡茶
比如,想泡壺茶喝。當(dāng)時的情況是:開水沒有;水壺要洗,茶壺、茶杯要洗;火已生了,茶葉也有了。怎么
辦?
辦法甲:洗好水壺,灌上涼水,放在火上;在等待水開的時間里,洗茶壺、洗茶杯、拿茶葉;等水開
了,泡茶喝。
辦法乙:先做好一些準(zhǔn)備工作,洗水壺,洗茶壺茶杯,拿茶葉;一切就緒,灌水燒水;坐待水開了,泡
茶喝。
辦法丙:洗凈水壺,灌上涼水,放在火上,坐待水開;水開了之后,急急忙忙找茶葉,洗茶壺茶杯,泡
茶喝。
哪一種辦法省時間?我們能一眼看出,第一種辦法好,后兩種辦法都窩了工。
這是小事,但這是引子,可以引出生產(chǎn)管理等方面有用的方法來。
水壺不洗,不能燒開水,因而洗水壺是燒開水的前提。沒開水、沒茶葉、不洗茶壺茶杯,就不能泡茶,因而
這些又是泡茶的前提。它們的相互關(guān)系,可以用下邊的箭頭圖來表示:
從這個圖上可以一眼看出,辦法甲總共要16分鐘(而辦法乙、丙需要20分鐘)。如果要縮短工時、提高工作
效率,應(yīng)當(dāng)主要抓燒開水這個環(huán)節(jié),而不是抓拿茶葉等環(huán)節(jié)。同時,洗茶壺茶杯、拿茶葉總共不過4分鐘,大
可利用“等水開”的時間來做。
是的,這好像是廢話,卑之無甚高論。有如走路要用兩條腿走,吃飯要一口一口吃,這些道理誰都懂得。但
稍有變化,臨事而迷的情況,常常是存在的。在近代工業(yè)的錯綜復(fù)雜的工藝過程中,往往就不是像泡茶喝這
么簡單了。任務(wù)多了,幾百幾千,甚至有好幾萬個任務(wù)。關(guān)系多了,錯綜復(fù)雜,千頭萬緒,往往出現(xiàn)“萬事俱
備,只欠東風(fēng)”的情況。由于一兩個零件沒完成,耽誤了一臺復(fù)雜機(jī)器的出廠時間?;蛲驗樽サ牟皇顷P(guān)
鍵,連夜三班,急急忙忙,完成這一環(huán)節(jié)之后,還得等待旁的環(huán)節(jié)才能裝配。
洗茶壺,洗茶杯,拿茶葉,或先或后,關(guān)系不大,而且同是一個人的活兒,因而可以合并成為
代碼實現(xiàn):
public static void main(String[] args) {Thread t1 = new Thread(() -> {log.debug("洗水壺");try {Thread.sleep(1);log.debug("燒開水");Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}},"老王");Thread t2 = new Thread(() -> {try {log.debug("洗茶壺");Thread.sleep(1);log.debug("洗茶杯");Thread.sleep(2);log.debug("拿茶葉");Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}try {t1.join();} catch (InterruptedException e) {e.printStackTrace();}log.debug("泡茶");},"小王");t1.start();t2.start();}運行結(jié)果: 00:34:57.318 c.Thread14: [老王] - 洗水壺 00:34:57.324 c.Thread14: [小王] - 洗茶壺 00:34:57.329 c.Thread14: [小王] - 洗茶杯 00:34:57.329 c.Thread14: [老王] - 燒開水 00:34:57.332 c.Thread14: [小王] - 拿茶葉 00:34:57.336 c.Thread14: [小王] - 泡茶總結(jié)
以上是生活随笔為你收集整理的多线程学习九:煮茶算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用phpstudy搭建thinkphp
- 下一篇: 国外某公司前员工删了该公司所有客户数据