import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;import java.util.concurrent.BlockingQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.LinkedBlockingQueue;public class AsyncExecute {// (一),用CountDownLatch控制多線程的執(zhí)行順序// (二),多個線程同時工作時// (三),但有一個線程需要等其他線程結束后才能開始 public AsyncExecute(CountDownLatch cdl) { this.latch = cdl; queue = new LinkedBlockingQueue(); File file = new File(“F:xbl1.sql”); try{ bw = new BufferedWriter(new FileWriter(file)); } catch(Exception ex) { ex.printStackTrace(); } } // 控制資源釋放 private CountDownLatch latch; // 阻塞隊列 private BlockingQueue queue; private BufferedWriter bw; private boolean finshedHandle = false; // 線程能發(fā)現(xiàn)volatile變量最新值 private volatile boolean sendFinished = false; public void sendFinish() { sendFinished = true; } // 釋放資源 public void release() { System.out.println(“release..”); if (bw != null) { try { bw.close(); } catch (IOException e) { } } if(queue != null) { queue.clear(); queue = null; } } // 往隊列發(fā)送消息 public void sendMsg(String text) { queue.add(text); } public void handle() { // 模擬性能瓶頸每3秒 new Thread( new Runnable() { public void run() { while(!finshedHandle) { try { Thread.sleep(3000); } catch(Exception ex) {} // 隊列中獲取 String s = queue !=null? queue.peek():null; if(s != null) { // remove彈出 queue.poll(); try { bw.write(s); bw.newLine(); } catch(Exception ex) {} } // 隊列為空 if(sendFinished) { /* CountDownLatch 是一個同步工具類, 用來協(xié)作多個線程間的同步,或起到線程間通信 (而不是互斥)。 (一),他是通過計數(shù)器來實現(xiàn)的, (二),計數(shù)器的初始值為線程的數(shù)量 * (三),每當一個線程完成任務后, (四),計數(shù)器的值就會減1。 * (五),當計數(shù)器的值為0時, (六),它表示所有線程已經(jīng)完成任務 */ // 計數(shù)器1->0 latch.countDown(); finshedHandle = true; break; } } } } ).start(); } public static void main(String[] args)throws Exception { //(一),CountDownLatch這個類 //(二),可以使一個線程等待 //(三),其他線程完成任務后再執(zhí)行 CountDownLatch latch = new CountDownLatch(1); AsyncExecute async = new AsyncExecute(latch); async.handle(); Scanner scanner = new Scanner(System.in); while(true) { String text = scanner.next(); if(text.equals(“exit”)) { async.sendFinish(); break; } async.sendMsg(text); } try { // 阻塞主線程,等待消息寫入到本地文件完成 latch.wait(); } catch(Exception ex) {} async.release(); scanner.close(); } }
java多線程異步CountDownLatch
相關推薦
四季沐歌榮膺「金致獎2024年度家居消費者信賴安心交付品牌」
守正創(chuàng)新是家居行業(yè)的靈魂,也是推動行業(yè)高質(zhì)量發(fā)展的不竭動力。2024年,中國家居產(chǎn)業(yè)發(fā)展經(jīng)歷了深刻變革,眾多杰出品牌和行業(yè)精英堅定不移地邁向高質(zhì)量發(fā)展之路,在面對產(chǎn)業(yè)變革與不確定的…
歡樂冰雪 共創(chuàng)未來——第十一屆全國大眾冰雪季啟動暨四季沐歌空氣能松花江冰雪嘉年華溫暖驛站正式開館
1月7日上午,第十一屆全國大眾冰雪季啟動儀式暨四季沐歌空氣能松花江冰雪嘉年華溫暖驛站開館儀式在哈爾濱松花江冰雪嘉年華隆重舉行。哈爾濱文化旅游規(guī)劃設計院有限公司董事長黃訓軍、市場部部…
空氣能十大品牌四季沐歌空氣能備受贊賞,推動集中供暖舒適化變革
在山東省濰坊市泰和華府小區(qū),身為空氣能十大品牌的四季沐歌空氣能熱泵以其高效、環(huán)保、節(jié)能的特點和舒適溫暖效果,受到了小區(qū)業(yè)主們的喜愛與好評。這不僅是對整個小區(qū)業(yè)主冬季采暖需求的滿足,…
他們的愛情故事 | 遇見她就是愛情最好的模樣!
“沒想到竟然真的能去參加哈爾濱冰雪集體婚禮,本來是抱著試試看的態(tài)度報名,想要給我們的愛情一份浪漫儀式感,因為她一直很向往哈爾濱的冰雪?!笨吹剿募俱甯杩諝饽芄镜墓枮I公益冰雪集體婚…
【用戶告白】第二十八期|四季沐歌空氣能收獲感謝信!為道孚縣各級師生送去溫暖與舒適
在青藏高原東南緣的鮮水河斷裂帶,有一個被群山環(huán)抱的縣城——甘孜藏族自治州道孚縣。這里地形復雜,最高海拔達5820米,平均海拔為3245米,氣候以寒冷干燥、冬長夏短著稱。在這片高寒之…
勇闖極境 | 四季沐歌空氣能登上世界屋脊,征服西藏高寒
勇征極寒,強勁供暖。12月,四季沐歌空氣能極境之旅走進神秘的“第三極”——西藏。巍峨的雪山、蔚藍的天空、鏡面般的圣湖、陡峭的懸崖、無盡的戈壁和沙漠,看過央視經(jīng)典紀錄片《第三極》的觀…
來自空氣能十大品牌四季沐歌的最新杰作,“真省”系列新品采暖熱水一體機驚艷亮相哈爾濱
12月16日,四季沐歌空氣能索菲亞教堂游客溫暖驛站·零碳小屋正式開館,尤為閃耀“爾濱”的是重磅發(fā)布的四季沐歌空氣能“真省”系列采暖熱水一體機新品,可以滿足用戶不同場景下的采暖熱水需…
1.88萬平方公里、近5萬戶家庭,四季沐歌空氣能和工程服務團隊守護居民溫暖過冬
蒼茫遼闊的內(nèi)蒙古自治區(qū),平均風力達6級以上的大風呼嘯著,帶來陣陣寒意,冰雪中的極寒天氣凍得行人“瑟瑟發(fā)抖”。然而走進內(nèi)蒙古呼和浩特中燃煤改電項目覆蓋的居民家庭,屋子里是四季沐歌空氣…
哈爾濱第四十一屆“四季沐歌”公益冰雪集體婚禮冠名簽約暨征集啟動儀式隆重舉行
11月20日,哈爾濱第四十一屆“四季沐歌”公益冰雪集體婚禮冠名簽約暨新人征集啟動儀式在哈爾濱隆重舉行。本次活動由中共哈爾濱市委宣傳部、共青團哈爾濱市委員會、哈爾濱市文化廣電和旅游局…
【暖冬大巡動】第二期|從白天到黑夜,四季沐歌空氣能全國冬檢服務不停歇
11月的新疆,隨著強冷空氣入侵,天空飄落雪花,冷風直吹、寒意逼人,氣溫早已跌至零下,新疆各地氣象部門已接連發(fā)布寒潮、暴雪、大風、大霧、道路結冰等預警信號。 在如此寒冷、交通又不便的…