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();
        }
    }
     
  • 相关阅读:
    http 400 错误的请求怎么解决
    HTTP 404
    怎样在WIN7系统下安装IIS
    未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?) 转
    错误 1 未能找到元数据文件“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/wwwroot/7cb4fcd
    mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)
    前端进阶之路:初涉Less
    原生js实现tooltip提示框的效果
    jquery+css实现邮箱自动补全
    前端面试中常见的算法问题读后整理
  • 原文地址:https://www.cnblogs.com/zhaotao11/p/10250441.html
Copyright © 2011-2022 走看看