首页 > 编程语言 > 详细

线程池

时间:2019-01-10 16:14:05      阅读:175      评论:0      收藏:0      [点我收藏+]
使用线程池方式—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();
    }
}
技术分享图片

 

 

 

线程池

原文:https://www.cnblogs.com/zhaotao11/p/10250441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!