程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 如何使用java閉鎖實現並發測試

如何使用java閉鎖實現並發測試

編輯:關於JAVA
 

最近看到公司的一個同事寫了一個程序對我們的服務器進行並發測試,看了他代碼令我很抓狂,他用一個for循環,然後分別啟動線程進行就搞定,類似這樣的寫法:

for(int i=0;i<5000;i++){

Thread thread = new MyThread();

thread.start();

}

上面的寫法其實不是真正的並發測試,沒有實現對5000個線程進行同步,讓它們進行並發啟動.因為之前看了《Java並發編程實戰》,看了裡面對一種同步工具閉鎖的介紹,利用這個類就可以實現真正的並發程序測試.

閉鎖:一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。即,一組線程等待某一事件發生,事件沒有發生前,所有線程將阻塞等待;而事件發生後,所有線程將開始執行;閉鎖最初處於封閉狀態,當事件發生後閉鎖將被打開,一旦打開,閉鎖將永遠處於打開狀態。

下面我寫了一個類,利用閉鎖(CountDownLatch)來實現對本網站並發進行測試.
package com.thred;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class ThreadTest {

public static void main(String[] args) {
final int num = 10;
final CountDownLatch begin = new CountDownLatch(1);
final CountDownLatch end = new CountDownLatch(num);

for (int i = 0; i < num; i++) {
new Thread(new MyWorker(i, begin, end)).start();
}

// 睡眠十秒
try {
Thread.sleep(10000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

System.out.println("開始進行並發測試");
begin.countDown();
long startTime = System.currentTimeMillis();

try {
end.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
long endTime = System.currentTimeMillis();
System.out.println("結束並發測試 !");
System.out.println("花費  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved