Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          ejb與java序列化(2)--測試代碼

                  接上篇,有興趣的朋友可以直接拿我的測試代碼自行測試,請自行修改諸如線程數,執行時間,序列化的數據量大小等參數。如果想嘗試做thread dump,可以打開相關的兩個注釋,會更方便一些,代碼中都有相應的注釋可供參考。

          測試代碼如下:
          package test;

          import java.io.ByteArrayOutputStream;
          import java.io.IOException;
          import java.io.ObjectOutputStream;
          import java.io.Serializable;
          import java.util.ArrayList;

          public class Test implements Runnable {
              
          //Notice! set the three test parameter to what you want first
              /**
               * thread count to run test
               
          */
              
          private static final int THREAD_COUNT = 50;
              
          /**
               * time in seconds to run test
               
          */
              
          private static final long TEST_TIME_SECOND = 1 * 30;
              
          /**
               * during test, we serialize a Data instance with an ArrayList that contains DataItem instance.
               * This is to set how many DataItem in the ArrayList.
               
          */
              
          private static final long ITEMS_COUNT_IN_TEST_OBJECT = 1000;
              

              
          private static int finishedCount = 0;
              
          private static boolean needStop = false;
              
          private static Object needStopLock = new Object();
              
          private static Object finishedCountLock = new Object();

              
          private static boolean isNeedStop() {
                  
          synchronized (needStopLock) {
                      
          return needStop;
                  }
              }

              
          private static void setNeedStop() {
                  
          synchronized (needStopLock) {
                      needStop 
          = true;
                  }
              }

              
          private static void addFinisedCount() {
                  
          synchronized (finishedCountLock) {
                      finishedCount
          ++;
                  }
              }

              
          /**
               * 
          @param args
               
          */
              
          public static void main(String[] args) {
                  
          // run it first to load all the class
                  new Test().test();
                  
          // to dump thread open these
                  
          // try {
                  
          // Thread.sleep(20 * 1000);
                  
          // System.out.println("main sleep. go to find pid, we need it later to send signal");
                  
          // Thread.sleep(2 * 1000);
                  
          // System.out.println("prepard to dump");
                  
          // } catch (InterruptedException e) {
                  
          // e.printStackTrace();
                  
          // }

                  
          long timeBegin = System.currentTimeMillis();
                  
          for (int i = 0; i < THREAD_COUNT; i++) {
                      Thread t 
          = new Thread(new Test());
                      t.setName(
          "testthread" + i);
                      t.start();
                  }

                  
          long timeEnd = timeBegin + TEST_TIME_SECOND * 1000;
                  
          while (System.currentTimeMillis() < timeEnd) {
                      
          try {
                          Thread.sleep(
          50);
                      } 
          catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
                  setNeedStop();
                  System.out.println(THREAD_COUNT 
          + " thread finished " + finishedCount
                          
          + " times in " + TEST_TIME_SECOND + " seconds");

                  
          // to dump thread open these
                  
          // try {
                  
          // Thread.sleep(5 * 1000);
                  
          // //System.out.println("dump now");
                  
          // } catch (InterruptedException e) {
                  
          // e.printStackTrace();
                  
          // }
              }

              
          public void run() {
                  
          while (!isNeedStop()) {
                      test();
                      addFinisedCount();
                  }
              }

              
          private void test() {
                  ByteArrayOutputStream bos 
          = new ByteArrayOutputStream();
                  Data data 
          = new Data();

                  
          try {
                      
          // long time1 = System.currentTimeMillis();
                      ObjectOutputStream oos = new ObjectOutputStream(bos);
                      oos.writeObject(data);
                      bos.toByteArray();
                      
          // long time2 = System.currentTimeMillis();

                      
          // System.out.print((time2 - time1) + " ");

                  } 
          catch (IOException e) {
                      e.printStackTrace();
                  }
              }

              
          private static class Data implements Serializable {
                  
          private static final long serialVersionUID = -376987039014824563L;
                  
          private static final ArrayList DEFAULT = new ArrayList();
                  
          static {
                      
          for (int i = 0; i < ITEMS_COUNT_IN_TEST_OBJECT; i++) {
                          DEFAULT.add(
          new DataItem(i));
                          
          // DEFAULT.add(DataItem.a + i);
                      }
                  }
                  
          private ArrayList content = DEFAULT;
              }

              
          private static class DataItem implements Serializable {
                  
          private static final long serialVersionUID = 1L;
                  
          private static final String a = "sdfsdfsdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
                  
          private int number;
                  
          private String content;

                  
          public DataItem(int number) {
                      
          this.number = number;
                      
          this.content = a + number;
                  }
              }
          }

          也可以從這里直接下載到完整的eclipse項目,除上面的代碼外,還有thread dump文件和已經設置好的jprobe的配置文件。
          (blogjava不能上傳文件,所以只好放fs2you)
          http://www.fs2you.com/files/59a26119-5d1a-11dd-ad4f-0014221b798a/

          posted on 2008-07-29 10:36 sky ao 閱讀(1170) 評論(0)  編輯  收藏 所屬分類: ejb

          主站蜘蛛池模板: 芜湖县| 衡南县| 汉源县| 阳城县| 鄯善县| 石台县| 开阳县| 卓尼县| 金门县| 绥宁县| 西盟| 涿鹿县| 宜州市| 冷水江市| 蓬安县| 盐亭县| 富川| 仲巴县| 县级市| 柘城县| 黑龙江省| 历史| 萨迦县| 于都县| 尼勒克县| 彝良县| 阿城市| 宣威市| 宁阳县| 榆林市| 宁安市| 云阳县| 卓尼县| 长春市| 邹平县| 姚安县| 星子县| 西林县| 奉节县| 会理县| 江口县|