ゞ沉默是金ゞ

          魚離不開水,但是沒有說不離開哪滴水.
          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 ゞ沉默是金ゞ 閱讀(326) 評(píng)論(0)  編輯  收藏 所屬分類: Java SE
          主站蜘蛛池模板: 新竹县| 岱山县| 铜鼓县| 谢通门县| 长宁区| 四平市| 哈密市| 班戈县| 荣昌县| 运城市| 百色市| 吐鲁番市| 潍坊市| 成都市| 融水| 嵊州市| 仙桃市| 宣威市| 德令哈市| 新民市| 福安市| 义马市| 韶关市| 汕头市| 卫辉市| 洪雅县| 丰顺县| 河池市| 灌阳县| 上饶市| 镇江市| 巴彦县| 阳曲县| 青河县| 淮阳县| 兴仁县| 苍南县| 确山县| 东源县| 朝阳区| 昭觉县|