`
yxpjx01
  • 浏览: 2977 次
社区版块
存档分类
最新评论

java-线程(futureTask、callable)

    博客分类:
  • java
 
阅读更多
要取到一个线程的返回值,则线程需要实现callable接口
返回值用future或futureTask来取得

public class FutureTaskTest {
    public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException { 
        Callable<Integer> callable = new Callable<Integer>() { 
            public Integer call() throws Exception { 
                return new Random().nextInt(100); 
            } 
        };
       
        //第一种用法:用list来拿到返回值**********8------------------//
        List<FutureTask<Integer>> futureList = new ArrayList<FutureTask<Integer>>();
        //1、创建10个futureTask,将10个futureTask放到list数组中
        for(int i=0; i<10; i++)
        {
           FutureTask<Integer> future = new FutureTask<Integer>(callable);
           futureList.add(future);
        }
        //2、用线程池去执行这10个futureTask
       //用线程池去实现
        ExecutorService service = Executors.newCachedThreadPool();
        for(int i=0; i<10; i++)
        {
        service.submit(futureList.get(i));
        }
        //打印返回的结果
        for(FutureTask<Integer> list :futureList)
        {
        System.out.println("******"+list.get()+"******");
        }
        //****************************-----------------**//
       
        //第二种方法:用completionService 来执行
        ExecutorService service1 = Executors.newScheduledThreadPool(12);
        CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(service1);
        for(int i=0; i<10; i++)
        {
        cs.submit(callable);
       
        }
        for(int i=0; i<10; i++){
        System.out.println(cs.take().get());
       
        }
        //线程结束
        service1.shutdown();
        service.shutdown();
      
    } 
分享到:
评论

相关推荐

    Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable

    http://blog.csdn.net/yangzhaomuma/article/details/51722779

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java多线程返回值使用示例(callable与futuretask)

    主要介绍了多线程返回值使用示例(callable与futuretask),需要的朋友可以参考下

    【并发编程】 — Runnable、Callable、Future和FutureTask之间的关系

    2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...

    多线程机制

    多线程机制 1 1、 Runnable接口与Thread类 1 2、 两个创建线程方法的比较 3 3、 几个常用的改变线程状态的方法 3 4、 线程的同步机制 8 ...10、 Callable结合FutureTask的多线程使用(免打扰模式) 24

    线程超时死掉

    Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便...

    2万字Java并发编程面试题合集(含答案,建议收藏)

    1、在 java 中守护线程和本地线程区别?2、线程与进程的区别?3、什么是多线程中的上下文切换?4、死锁与活锁的区别,死锁与饥饿的区别?5、Java 中用到的线程调度算法是什么?6、什么是线程组,为什么在 Java 中不...

    java8源码-concurrency:java并发总结

    Callable Future ExecutorService Class Thread FutureTask FutureTask 获取线程执行结果的原理:以 ThreadPoolExecutor 为例(实现 ExecutorService 接口), 其 submit() 方法提交任务, 返回 一个 FutureTask 实例...

    Java并发编程实战

    6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...

    Java多线程实现四种方式原理详解

    3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果 后面两种可以归结成一类:有返回值,...

    Java 并发编程实战

    6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...

    Java并发编程(学习笔记).xmind

    使用Callable对象实例化FutureTask类 信号量(Semaphore) 用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量 管理者一组虚拟的许可。acquire获得许可(相当于P操作),...

    多线程文章目录

    了解线程的状态、常用方法以及Thread、Runnable、Callable、Future、FutureTask这些基础概念和简单应用。 Java多线程②——多线程知识梳理 有助于了解线程池相关的知识、包括线程池执行逻辑、常用方法; 以及java为...

    javase之多线程技术

    多线程相关知识 相关说明 标题:&lt;Java进阶课程之并发编程快速入门与多线程实战项目&gt; 课程内容: 1.CPU调度算法原理(先来先服务...3.手写Callable与FutureTask模式 两种方式 4.并发编程实战案例之手写并发队列日志框架

    java7rt.jar源码-JVM:JVM学习笔记

    java.util.concurrent.Callable ; import java.util.concurrent.ExecutionException ; import java.util.concurrent.FutureTask ; /** * @Author IamZY * @create 2019/12/28 14:57 */ public class CallableDemo { ...

    这就是标题—— JUC.pdf

    FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore(信号量,流量控制) ReentrantReadWriteLock (读写锁) BlockingQueue(阻塞队列) 线程池 池化技术 线程池的优势 ...

    LeetCode判断字符串是否循环-java:Java

    使用excutors的静态方法创建线程.excute(runnable实现类)/.submit(callable实现类),.shutdown() (3)线程的生命周期:创建,就绪(start),运行(获得cpu资源),阻塞 object的方法:wait(notify,notifyall)...

    并发编程笔记20190526.docx

    4、Callable、Future和FutureTask 30 5、原子操作CAS (compare atomic swap) 32 三、显式锁和AQS 34 1、AQS定义两种资源共享方式: 34 2、深入源码 37 3、了解Condition的实现 42 4、 锁的可重入 44 第三章 并发容器...

    Android异步并发类库Android-lite-go.zip

    LiteGo可以直接投入Runnable、Callable、FutureTask 等类型的实现来运行一个任务,它的核心组件是「SmartExecutor」,它可以用来作为「App」内支持异步并发的唯一组件。 在一个App中「SmartExecutor」可以有多个...

Global site tag (gtag.js) - Google Analytics