ゞ沉默是金ゞ

          魚離不開水,但是沒有說不離開哪滴水.
          posts - 98,comments - 104,trackbacks - 0
          1. use ThreadPoolExecutor to do some data work, the thread number is solid. for example:storing data into cache, process large mount of data.
          import java.util.Properties;
          import java.util.concurrent.ArrayBlockingQueue;
          import java.util.concurrent.BlockingQueue;
          import java.util.concurrent.ThreadPoolExecutor;
          import java.util.concurrent.TimeUnit;

          public class Controller1 {

              
          public static void main(String[] args) {
                  
          // initial parameters
                  int iNumberOfThreads = 5;
                  Properties prop 
          = new Properties();

                  
          // start thread running
                  BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100,
                          
          true);
                  ThreadPoolExecutor executor 
          = new ThreadPoolExecutor(
                          iNumberOfThreads, 
          // core size
                          iNumberOfThreads, // max size
                          1// keep alive time
                          TimeUnit.MINUTES, // keep alive time units
                          queue);
                  
          for (int k = 0; k < iNumberOfThreads; k++{
                      SingleThread1 ct 
          = new SingleThread1(k, prop);
                      executor.execute(ct);
                  }

                  
                  System.out.println(
          "Expired Active threads = " + executor.getActiveCount());
                  executor.shutdown();
                  
          try {
                      
          boolean isEnd = false;
                      
          while (!isEnd) {
                          isEnd 
          = executor.awaitTermination(10000,
                                  TimeUnit.SECONDS);
                      }


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

              }


          }


          import java.util.Properties;

          public class SingleThread1 implements Runnable {
              
          int threadIdx;
              Properties prop;
              
              
          public SingleThread1(int threadIdx, Properties prop) {
                  
          super();
                  
          this.threadIdx = threadIdx;
                  
          this.prop = prop;
              }


              @Override
              
          public void run() {
                  
          int i = 0;
                  
                  
          while(i < 10){
                      System.out.println(
          "Thread " + threadIdx + " output number " + i + ".");
                      i 
          ++;
                  }

              }


          }


          2. use ThreadPoolExecutor do some work in limited time, for example: load test.
          import java.util.Properties;
          import java.util.concurrent.ArrayBlockingQueue;
          import java.util.concurrent.BlockingQueue;
          import java.util.concurrent.ThreadPoolExecutor;
          import java.util.concurrent.TimeUnit;

          public class Controller2 {
              
          static long testStartTimer = 0;
              
          static int iDurationSecs = 0;

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  
          // initial parameters
                  int iNumberOfThreads = 10;
                  Properties prop 
          = new Properties();
                  testStartTimer 
          = System.currentTimeMillis();
                  iDurationSecs 
          = 10;
                  
                  
          // start thread running
                  BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100,
                          
          true);
                  ThreadPoolExecutor executor 
          = new ThreadPoolExecutor(
                          iNumberOfThreads, 
          // core size
                          iNumberOfThreads, // max size
                          1// keep alive time
                          TimeUnit.MINUTES, // keep alive time units
                          queue);
                  
          int i = 0;
                  
          while(!timerExpired()){
                      
          if (executor.getActiveCount() >= iNumberOfThreads) {
                          
          // build the system command we want to run
                          try {
                              Thread.sleep(
          100);
                              
          continue;
                          }
           catch (InterruptedException e) {
                              
          // TODO Auto-generated catch block
                              e.printStackTrace();
                          }

                      }

                      SingleThread2 ct 
          = new SingleThread2(i, prop);
                      executor.execute(ct);
                      i 
          ++;
                  }

                  
                  System.out.println(
          "Expired Active threads = " + executor.getActiveCount());
                  executor.shutdown();
                  
          try {
                      
          int waittime = iNumberOfThreads + 10;
                      executor.awaitTermination(waittime, TimeUnit.SECONDS);
                  }
           catch (InterruptedException e) {
                      e.printStackTrace();
                  }

              }


              
          public static boolean timerExpired() {
                  Long now 
          = System.currentTimeMillis();
                  
          if ((now - testStartTimer) > (iDurationSecs * 1000))
                      
          return true;
                  
          else
                      
          return false;
              }

          }

          import java.util.Properties;

          public class SingleThread2 implements Runnable {
              Properties prop;
              
          int threadId;
              
              
          public SingleThread2(int threadId, Properties prop) {
                  
          super();
                  
          this.threadId = threadId;
                  
          this.prop = prop;
              }


              
          int i = 0;
              @Override
              
          public void run() {
                  System.out.println(
          "SingleThread2 " + threadId + " output number " + i + ".");
                  i
          ++;
              }


          }








          posted on 2012-11-27 13:43 ゞ沉默是金ゞ 閱讀(318) 評論(0)  編輯  收藏 所屬分類: Java SE
          主站蜘蛛池模板: 石狮市| 鄂温| 东明县| 中山市| 晋中市| 大名县| 松桃| 辉县市| 麻阳| 靖安县| 安龙县| 莆田市| 中方县| 陇川县| 承德市| 永仁县| 改则县| 莫力| 汽车| 丹阳市| 正镶白旗| 来凤县| 石狮市| 樟树市| 喀喇沁旗| 香港| 微博| 石渠县| 延津县| 太原市| 江川县| 明光市| 孟村| 固始县| 包头市| 九江市| 贵阳市| 洛川县| 贡山| 巨野县| 翁源县|