1. 創建線程的三種方式:
- 繼承Thread,重寫run方法
- 實現Runnable接口,重新run方法
- 實現Callable接口,重寫call方法
2. Callable接口實際上是屬於Executor框架中的功能類,Callable接口與Runnable接口的功能類似,但提供了比Runnable更加強大的功能。
- Callable可以在任務結束的時候提供一個返回值,Runnable無法提供這個功能
- Callable的call方法分可以拋出異常,而Runnable的run方法不能拋出異常。
3. 實例
package thread.learn; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * Created by liujinhong on 2017/3/6. */ public class CallableAndFuture { static class MyThread implements Callable<String> { @Override public String call() throws Exception { return "Hello world"; } } static class MyThread2 implements Runnable { @Override public void run() { } } public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = threadPool.submit(new MyThread()); try { System.out.println(future.get()); } catch (Exception e) { } finally { threadPool.shutdown(); } } }