- 创建执行线程的四种方式:
- 继承
Thread
类; - 实现
Runnable
接口; - 实现
Callable
接口; - 线程池。
-
Java 5.0
在java.util.concurrent
提供了一个新的创建执行线程的方式:Callable
接口。 -
Callable
接口类似于Runnable
,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable
不会返回结果,并且无法抛出经过检查的异常。 而实现Callable
接口,方法可以有返回值,并且可以抛出异常。 -
执行
Callable
方式,需要FutureTask
实现类的支持,用于接收运算结果。FutureTask
也可用作闭锁。 -
示例:
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class TestCallable { public static void main(String[] args) { ThreadDemo td = new ThreadDemo(); FutureTask<Integer> result = new FutureTask<>(td); new Thread(result).start(); try { System.out.println(result.get()); System.out.println("-----------------------"); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } class ThreadDemo implements Callable<Integer>{ private static int sum = 0; @Override public Integer call() throws Exception { for (int i = 0; i < 1000; i++) { sum += i; } return sum; } }