java 多线程用例sample

本文详细介绍了如何使用Java中的Executors创建线程池,并利用ExecutorService进行任务管理和执行。包括固定大小线程池和缓存线程池的创建方式,以及通过Callable实现有返回值的任务处理。此外还涉及了如何通过Future获取异步计算结果。

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值