併發測試類

package controller;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Mytest {
    public static void main(String[] args) {
        ExecutorService service = Executors.newCachedThreadPool(); //創建一個線程池
        final CountDownLatch cdOrder = new CountDownLatch(1);//指揮官的命令,設置爲1,指揮官一下達命令,則cutDown,變爲0,戰士們執行任務
        final CountDownLatch cdAnswer = new CountDownLatch(1000);//因爲有三個戰士,所以初始值爲3,每一個戰士執行任務完畢則cutDown一次,當三個都執行完畢,變爲0,則指揮官停止等待。
        for (int i = 0; i < 1000; i++) {
            Runnable runnable = new Runnable() {
                public void run() {
                    try {
                       HttpRequestUtil.sendGet("http://192.168.2.162:8087/send", "");
                    } catch (Exception e) {

                    } finally {
                        cdAnswer.countDown();
                    }
                }
            };
            service.execute(runnable);//爲線程池添加任務
        }
        try {
            cdOrder.countDown(); //發送命令,cdOrder減1,處於等待的戰士們停止等待轉去執行任務。
            cdAnswer.await(); //命令發送後指揮官處於等待狀態,一旦cdAnswer爲0時停止等待繼續往下執行
            System.out.println("線程" + Thread.currentThread().getName() +
                    "已收到所有響應結果");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
        service.shutdown(); //任務結束,停止線程池的所有線程
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章