• Callable创建线程


    (1)Callable接口更像是Runnable接口的增强版,相比较Runable接口,Call()方法新增捕获和抛出异常的功能;Call()方法可以返回值<br>
    (2)Future接口提供了一个实现类FutureTask实现类,FutureTaks类用来保存Call()方法的返回值,并作为Thread类的target。<br>
    (3)调用FutureTask的get()方法来获取返回值
    
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    /**
     * (1)创建Callable接口的实现类,并重写call()方法,该call()方法作为线程的执行体,且有返回值
     * (2)创建了Callable接口的实现类的实例,并用FutureTask()方法包装对象,该FutureTask()对象实现了
     *    将对象的返回值包装的功能
     * (3)使用FutureTask对象将Thread对象的target,创建并启动线程
     * (4)调用FutureTask对象的get()方法获得子线程执行结束后的返回值
     * */
    public class Callable_Future implements Callable<Integer> {
    
        @Override
        public Integer call() throws Exception {   //重写Callable接口中的call()方法
    
            int i=0;
            for(;i<100;i++) {
                System.out.println(Thread.currentThread().getName()+" "+i);
            }
            return i;
        }
    
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            //创建Callable的对象
            Callable_Future ca=new Callable_Future();
            FutureTask<Integer> ft=new FutureTask<Integer>(ca);
            for(int i=0;i<100;i++) {
                //返回值主线程的名称和执行代号
                System.out.println(Thread.currentThread().getName()+" "+i);  
                if(i==20) {
                new Thread(ft,"Callable线程").start();
                //该方法将导致主线程被阻塞,直到call()方法结束并返回为止
                 //System.out.println("子线程的返回值"+ft.get());  
                }
            }
            try{
                System.out.println("子线程的返回值"+ft.get());
            }catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    

      

  • 相关阅读:
    多线程008如何预防死锁
    多线程003volatile的可见性和禁止指令重排序怎么实现的
    多线程011线程池运行原理及复用原理
    多线程010为什么要使用线程池
    多线程009什么是守护线程
    多线程005创建线程有哪些方式
    多线程007描述一下线程安全活跃态问题,以及竞态条件
    多线程002ThreadLocal有哪些内存泄露问题,如何避免
    关于Tomcat的启动时机(精通Eclipse Web开发P40)
    乱侃~~~
  • 原文地址:https://www.cnblogs.com/qinyios/p/11124443.html
Copyright © 2020-2023  润新知