zoukankan      html  css  js  c++  java
  • 线程池

    使用线程池方式—Callable接口
    Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
    ExecutorService:线程池类
    <T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法
    Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用
    
    使用线程池中线程对象的步骤:
    创建线程池对象
    创建Callable接口子类对象
    提交Callable接口子类对象
    关闭线程池
    import java.util.concurrent.Callable;
    
    public class MyCallable implements Callable<String>{
        public String call() throws Exception {
            return "abc";
        }
    }
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class Test1 {
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            //1.先从线程池工厂中获取线程池对象
            ExecutorService es=Executors.newFixedThreadPool(2);
            //2.执行线程任务获取call方法执行后的返回值
            Future<String> str=es.submit(new MyCallable());
            //3.从Future对象中获取返回值
            String s=str.get();
            System.out.println(s);//abc
            //销毁线程池
            es.shutdown();
        }
    }
    线程池练习:返回两个数相加的结果
    import java.util.concurrent.Callable;
    
    public class CallSum implements Callable<Integer>{
        private int num;
        public CallSum(){}
        public CallSum(int num){
            this.num=num;
        }
        public Integer call() throws Exception {
            int sum=0;
            for(int i=1;i<num;i++){
                sum+=i;
            }
            return sum;
        }
    }
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class Demo03 {
        //用线程实现计算
        //由两个线程分别计算1-100的和  1-200的和
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            ExecutorService es=Executors.newFixedThreadPool(2);
            Future<Integer> f=es.submit(new CallSum(100));
            System.out.println(f.get());
            Future<Integer> f1=es.submit(new CallSum(200));
            System.out.println(f1.get());
            es.shutdown();
        }
    }
     
  • 相关阅读:
    A Deep Dive Into Draggable and DragTarget in Flutter
    使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒
    XmlDocument.load 读文件报异常:文件正被其它线程使用,解决方法
    拼多多是怎么骗你的?
    东北话中的满语
    唐郑国公魏征金口“斩龙台”梦斩泾河黄龙的传说
    Asp.Net Form表单控件的回车默认事件
    UpdatePanel 控件,客户端事件生命周期踩坑
    Javascript 严格模式(strict mode)详解
    代数、几何、分析 各自的范畴
  • 原文地址:https://www.cnblogs.com/zhaotao11/p/10250441.html
Copyright © 2011-2022 走看看