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控制多线程的执行顺序// (二),多个线程同时工作时// (三),但有一个线程需要等其他线程结束后才能开始 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; // 线程能发现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; } } // 往队列发送消息 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 是一个同步工具类, 用来协作多个线程间的同步,或起到线程间通信 (而不是互斥)。 (一),他是通过计数器来实现的, (二),计数器的初始值为线程的数量 * (三),每当一个线程完成任务后, (四),计数器的值就会减1。 * (五),当计数器的值为0时, (六),它表示所有线程已经完成任务 */ // 计数器1->0 latch.countDown(); finshedHandle = true; break; } } } } ).start(); } public static void main(String[] args)throws Exception { //(一),CountDownLatch这个类 //(二),可以使一个线程等待 //(三),其他线程完成任务后再执行 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
相关推荐
欢乐冰雪 共创未来——第十一届全国大众冰雪季启动暨四季沐歌空气能松花江冰雪嘉年华温暖驿站正式开馆
1月7日上午,第十一届全国大众冰雪季启动仪式暨四季沐歌空气能松花江冰雪嘉年华温暖驿站开馆仪式在哈尔滨松花江冰雪嘉年华隆重举行。哈尔滨文化旅游规划设计院有限公司董事长黄训军、市场部部…
空气能十大品牌四季沐歌空气能备受赞赏,推动集中供暖舒适化变革
在山东省潍坊市泰和华府小区,身为空气能十大品牌的四季沐歌空气能热泵以其高效、环保、节能的特点和舒适温暖效果,受到了小区业主们的喜爱与好评。这不仅是对整个小区业主冬季采暖需求的满足,…
他们的爱情故事 | 遇见她就是爱情最好的模样!
“没想到竟然真的能去参加哈尔滨冰雪集体婚礼,本来是抱着试试看的态度报名,想要给我们的爱情一份浪漫仪式感,因为她一直很向往哈尔滨的冰雪。”看到四季沐歌空气能公示的哈尔滨公益冰雪集体婚…
【用户告白】第二十八期|四季沐歌空气能收获感谢信!为道孚县各级师生送去温暖与舒适
在青藏高原东南缘的鲜水河断裂带,有一个被群山环抱的县城——甘孜藏族自治州道孚县。这里地形复杂,最高海拔达5820米,平均海拔为3245米,气候以寒冷干燥、冬长夏短著称。在这片高寒之…
勇闯极境 | 四季沐歌空气能登上世界屋脊,征服西藏高寒
勇征极寒,强劲供暖。12月,四季沐歌空气能极境之旅走进神秘的“第三极”——西藏。巍峨的雪山、蔚蓝的天空、镜面般的圣湖、陡峭的悬崖、无尽的戈壁和沙漠,看过央视经典纪录片《第三极》的观…
来自空气能十大品牌四季沐歌的最新杰作,“真省”系列新品采暖热水一体机惊艳亮相哈尔滨
12月16日,四季沐歌空气能索菲亚教堂游客温暖驿站·零碳小屋正式开馆,尤为闪耀“尔滨”的是重磅发布的四季沐歌空气能“真省”系列采暖热水一体机新品,可以满足用户不同场景下的采暖热水需…
1.88万平方公里、近5万户家庭,四季沐歌空气能和工程服务团队守护居民温暖过冬
苍茫辽阔的内蒙古自治区,平均风力达6级以上的大风呼啸着,带来阵阵寒意,冰雪中的极寒天气冻得行人“瑟瑟发抖”。然而走进内蒙古呼和浩特中燃煤改电项目覆盖的居民家庭,屋子里是四季沐歌空气…
哈尔滨第四十一届“四季沐歌”公益冰雪集体婚礼冠名签约暨征集启动仪式隆重举行
11月20日,哈尔滨第四十一届“四季沐歌”公益冰雪集体婚礼冠名签约暨新人征集启动仪式在哈尔滨隆重举行。本次活动由中共哈尔滨市委宣传部、共青团哈尔滨市委员会、哈尔滨市文化广电和旅游局…
【暖冬大巡动】第二期|从白天到黑夜,四季沐歌空气能全国冬检服务不停歇
11月的新疆,随着强冷空气入侵,天空飘落雪花,冷风直吹、寒意逼人,气温早已跌至零下,新疆各地气象部门已接连发布寒潮、暴雪、大风、大雾、道路结冰等预警信号。 在如此寒冷、交通又不便的…
【暖心大巡动】第一期|跨越风霜纵横南北 四季沐歌空气能2024年冬季巡检全国进行中
伴随新一股强冷空气侵袭,寒潮警报拉响,多地开启速冻模式!内蒙古中部、华北北部等局地降幅可达12℃,新疆北部、乌鲁木齐也将迎来大雪。在寒风瑟瑟的初冬,不少民众们纷纷开启了采暖设备,躲…