java 多线程用例sample

来源:互联网 发布:鬣狗难过岔路口 知乎 编辑:程序博客网 时间:2024/06/03 20:32

1。 用Executors创建threadpool ,并交由ExecutorService来管理。然后调用ExecutorService.submit 来执行具体的task返回是Future,同坐Future.get(). 便可以   拿到Future的返回值。或者是用ExecutorService.invokeAll(Collection<? extends Callable<T>> tasks)来执行tasklist。

    Executors 提供如下两个API来创建线程池

       public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory):通过threadFactory来创建线程,但线程的数目达到指定数量           后仍有新的task到达,将不会在创建新的线程,而是等待空闲的线程。 

        public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory): 通过threadFactory来创建线程,如果有空闲的线程会先复用先前的线程,         没有空闲的则会创建新的线程。  

     eg: ExecutorService  qafThreadPool = Executors.newCachedThreadPool(threadFactory);

    

2。创建线程(继承线程,或者实现ruanable或这callable,实现callable可以有返回值并且可以抛出checked exception)

    private class callAbleTask implements Callable<Double[]>{
      @Override
          public Double[] call() throws Exception {
           Double[] d = 
****;

       return d;
      }
    }

 

3。通过Future来取回异步计算的结果。通过 ExecutorService.submit(Callable<Double[]> task)来返回Future 对象。

     Future<Double[]> f =  ExecutorService.submit(callAbleTask );

4。通过 ExecutorService.invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throwsInterruptedException来执行先前定义好的多个task。

 

原创粉丝点击