通过实现Callable
接口。
环境:IntelliJ IDEA、Java语言
步骤
- 自定义类,实现Callable接口,需要返回值(call方法)
- 实现
call()
方法,编写线程执行体(可以抛出异常) - 创建目标对象,假设为t1
- 创建执行服务:
ExecutorService ser = Executors.newFixedThreadPool(int 线程个数);
- 提交执行结果:
Future<t1返回值类型> result1 = ser.submit(目标对象t1);
(t1返回值类型在前边定义类时定义) - 获取结果:
t1返回值类型 r1 = result1.get();
(可以抛出异常) - 关闭服务:
ser.shutdownNow();
代码演示
步骤一
自定义类,实现Callable接口,需要返回值(call方法)。
步骤二
实现call()
方法,编写线程执行体(可以抛出异常)
对Thread类中的扩展进行修改,修改成实现Callable
接口的方式。类命名为webDownloader2。因为实现Callable
接口可以定义返回值,所以这里把downloader
方法和run方法合并为call()
方法。把System.out.printf()
改成return
。
1 |
class webDownloader2 implements Callable { |
步骤三
创建目标对象。下边的t1-t4。
编写测试类:
1 |
public class TestCallable { |
下边步骤中的示例代码都是在该测试类中摘取出来的。
步骤四
创建执行服务。
1 |
ExecutorService ser = Executors.newFixedThreadPool(4); |
步骤五
提交执行结果。实现Callable接口的类webDownloader2中的call()方法的返回值类型为String。
1 |
Future<String> result1 = ser.submit(t1); |
步骤六
获取结果。get()方法,获取call()方法的返回值。
1 |
result1.get() |
步骤七
关闭服务。
1 |
ser.shutdownNow(); |
测试
运行结果:
1 |
开始下载。。。 |