亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

        java多線程異步CountDownLatch

        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(); } }

        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
        上一篇 2022年6月15日 18:17
        下一篇 2022年6月15日 18:17

        相關推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時間:周一至周五,10:30-18:30,節(jié)假日休息