zoukankan      html  css  js  c++  java
  • java基础——实现Callable接口创建线程

    package callable;
    
    /*
    创建线程方式三:实现Callable接口
    
    1.创建一个实现Callable的实现类
    2.实现call方法,将此线程需要执行的操作声明在次方法中
    3.创建Callable接口实现类的对象
    4.将此对象作为参数丢到FutureTask构造器中,创建FutureTask对象
    5.将FutureTask对象作为对象传递到Thread构造器中,创建Thread对象,start()
    6.如果需要方法的返回值,则用futureTask.get()方法去获取
    
    理解:
        1.call()可以有返回值
        2.call()可以抛出异常,被外面的操作捕获,获取异常信息
        3.Callable支持泛型
    
    @author zsben
    @create 2020-01-05 14:31
    */
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    class NumThread implements Callable{
    
        @Override
        public Object call() throws Exception {
            int sum=0;
            for(int i=2;i<=100;i+=2) {
                System.out.println(i);
                sum+=i;
            }
            return sum;//自动装箱了
        }
    }
    
    
    public class CallableTest {
        public static void main(String[] args) {
            NumThread numThread = new NumThread();
    
            FutureTask futureTask = new FutureTask(numThread);
            new Thread(futureTask).start();//futureTask实现了Runnable接口,启动线程启动call()
    
            try {
                //get()返回值即为FutureTask构造器参数Callable实现类重写的call()的返回值
                Object sum = futureTask.get();
                System.out.println(sum);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
    
        }
    }
  • 相关阅读:
    centos 配置php
    Linux下端口被占用解决
    LUOGU P1040 加分二叉树
    bzoj 1057: [ZJOI2007]棋盘制作
    1858: [Scoi2010]序列操作
    poj 2559 Largest Rectangle in a Histogram
    2018/7/19 模拟赛
    SPOJ 2916 GSS5
    BZOJ 4004: [JLOI2015]装备购买
    CF 549B Looksery Party
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12153099.html
Copyright © 2011-2022 走看看