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();
        }
    }
     
  • 相关阅读:
    406. 根据身高重建队列 vector 自定义排序
    5552. 到家的最少跳跃次数 BFS
    5602. 将 x 减到 0 的最小操作数 双指针
    Hadoop Container is running beyond memory limits code143
    1122. 数组的相对排序 自定义排序
    328. 奇偶链表 链表
    127. 单词接龙 bfs
    5600. 第 K 条最小指令 组合数学
    5548. 最小体力消耗路径 二分
    1024. 视频拼接 dp
  • 原文地址:https://www.cnblogs.com/zhaotao11/p/10250441.html
Copyright © 2011-2022 走看看