java多線程測試性能,總線程使用總時間。


前段時間在做java多線程,然后涉及到了一個效率的問題。

  java多線程中,所有線程執行完畢,總共使用多少時間呢?

import java.util.concurrent.CountDownLatch;

   countDwonlatch提供了最常用的一些測試方法。

創建一個countDownLatch對象:

  

 CountDownLatch countDownLatch = new CountDownLatch(500);   //這個構造函數的入參為 int num,表示當前線程的總數,這500就表示有500個線程 
countDownLatch.countDown();  //這個方法執行 會使總線程數-1,比如上面總線程為500,執行這個方法后為499,然后直到數量為0時,主線程從掛起狀態恢復。
countDownLatch.await();  //將主線程掛起等待,知道countDown()將總數量變成0時,恢復主線程。

這里要注意的是,countDownLatch.await();會導致程序直接掛起,后面代碼不再執行,所有如果你countDown()無效時,可能你提前await()該線程。

正確的使用方式是,要全部的(充分的)執行完countDwon();后在緊跟await();

下面列出代碼:

public class threadTimtCount implements Runnable {   static long startTime = System.currentTimeMillis();// 開始時間    
    final static CountDownLatch countDownLatch = new CountDownLatch(500);
    public static void main(String[] args) throws InterruptedException {
        threadTimtCount count = new threadTimtCount();        
        for (int i = 1; i <= 500; i++) {
            Thread thread = new Thread(count);         
            thread.start();    
//countDownLatch.await(); 錯誤的寫法,這會導致thread執行一遍之后,線程被掛起,然后第二次for循環無法執行了(程序掛起等待),這樣造成程序假死(卡死) } countDownLatch.await(); //一定要等到countDown()方法執行完畢后才使用 System.out.println(
"執行總時間:"+(System.currentTimeMillis()-startTime)); } @Override public void run() { try { Thread.sleep(timeIndex); System.out.println("currThread " + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ countDownLatch.countDown(); } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM