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);
}
}