About Java Thread

java.util.concurrent.ExecutorService:
   Some implementations classes are as listed:
     
  • AbstractExecutorService
  • ThreadPoolExecutor
  • ScheduledThreadPoolExecutor


   So what can there implementation could do are as follows:
  • To execute some particular Runable thread
  • To execute some particular Callable object
  • ExecutorService's method can return some usefull value
  •          but traditional normal thread.start() hasn't return value
  • You can choose submit() / invokeAll() / invokeAny()


  • ArrayBlockingQueue :一个由数组支持的有界队列。
  • LinkedBlockingQueue :一个由链接节点支持的可选有界队列。
  • PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
  • DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
  • SynchronousQueue :一个利用 BlockingQueue接口的简单聚集(rendezvous)机制。


java.util.concurrent.ThreadPoolExecutor
   corePoolSize: 线程池维护线程的最少数量
   maximumPoolSize:线程池维护线程的最大数量
   keepAliveTime:线程池维护线程所允许的空闲时间
   unit: 线程池维护线程所允许的空闲时间的单位  [TimeUnit ]
   workQueue:线程池所使用的缓冲队列 
       [BlockingQueue {LinkedBlockingQueue || ArrayBlockingQueue}]
   handler: 线程池对拒绝任务的处理策略  [RejectedExecutionHandler ]

   一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个
      Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。
 
   如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,
      也要创建新的线程来处理被添加的任务。

   如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,
      那么任务被放入缓冲队列。

   如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,
      并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。

   如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池
      中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

   也就是:处理任务的优先级为:
      核心线程corePoolSize、
      任务队列workQueue、
      最大线程maximumPoolSize,
      如果三者都满了,使用handler处理被拒绝的任务。

   当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过 
      keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

   unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
     
  • NANOSECONDS、
  • MICROSECONDS、
  • MILLISECONDS、
  • SECONDS。


   handler有四个选择:
      ThreadPoolExecutor.AbortPolicy()
        抛出java.util.concurrent.RejectedExecutionException异常
         ThreadPoolExecutor.CallerRunsPolicy()
        重试添加当前的任务,他会自动重复调用execute()方法
      ThreadPoolExecutor.DiscardOldestPolicy()
        抛弃旧的任务
      ThreadPoolExecutor.DiscardPolicy()
        抛弃当前的任务
----------------------------------------------------------------------

public interface IAction{

   String SUCCESS = "success";
   String FAILURE = "failure";
   String EXCEPTION = "Exception";
   
   public static enum Action{
      SUCCESS(IAction.SUCCESS){

         @Override
         public String responseToClient(){
            // Do some process
            return IAction.SUCCESS;
         }
      },
      FAILURE(IAction.FAILURE){

         @Override
         public String responseToClient(){
            // Do some process
            return IAction.FAILURE;
         }
      },
      EXCEPTION(IAction.EXCEPTION){

         @Override
         public String responseToClient(){
            // Do some process
            return IAction.EXCEPTION;
         }
      };
      String actionName;
      Action(String actionName){
         this.actionName = actionName;
      }
      abstract String responseToClient();
   }
}

Callable<String> cal = new Callable<String>(){   
    public String call() {   
        System.out.println("Logic processing in a callable ...");   
        try{
           Thread.sleep(500);   
        }catch(InterruptedException iE){
           Action.valueOf(ActionResults.EXCEPTION)
              .responseToClient();
           return ActionResults.EXCEPTION;
        }
        Action.valueOf(ActionResults.SUCCESS)
              .responseToClient();
        return ActionResults.SUCCESS;
    }          
};      
   
FutureTask<String> ft  = new FutureTask<String>(cal);   
  
try {   
    new Thread(ft).start();
    System.out.println("Outer the callable ...");   
    System.out.println(ft.get());   
} catch (InterruptedException iE) {   
} catch (ExecutionException eE) {   
} 

----------------------------------------------------------------------
Independant code snippets,与上无关
public void run() {
   try {
      while (true) {
         synchronized (workpile) {
            while (workpile.empty()) 
               workpile.wait();
               request = workpile.remove();
	}
	server.process(request);
      } 
   }catch (InterruptedException e) 
}

你可能感兴趣的:(java,thread,IE)