1.Callable接口介绍
JDK API文档描述:
Callable 接口类似于 Runnable
,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。
2.实现Callable接口,重写call()方法
package com.xiao.callable; import java.util.concurrent.Callable; /** * @Author 笑笑 * @Date 18:37 2018/05/23 */ public class MyThreadClass implements Callable<String>{ //V call() 由于该方法的返回值是个泛型V,所以具体的返回类型可以自己定义,下面返回值设置为了String, @Override public String call() throws Exception { return "笑笑"; } }
3.使用工厂类Executors的静态方法newFixedThreadPool()方法创建线程池,返回ExecutorService接口的实现类对象,然后调用submit()方法提交线程任务
package com.xiao.callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * @Author 笑笑 * @Date 19:00 2018/05/23 */ public class CallableDemo { public static void main(String[] args) throws Exception{ //参数表示此线程池里有多少可用的线程数量 ExecutorService es = Executors.newFixedThreadPool(3); //提交线程任务,返回一个Future接口,参数为Callable实现类对象 Future<String> future = es.submit(new MyThreadClass()); //获取返回值 String s = future.get(); System.out.println(s); } }