Java之Callable和Runnable
生活随笔
收集整理的這篇文章主要介紹了
Java之Callable和Runnable
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 接口定義?
1) Callable接口
public interface Callable<V> {V call() throws Exception; }2) Runnable接口
public interface Runnable {public abstract void run(); }?
?
2 不同點和相同點
1)相同點
都是接口,都可編寫多線程程序,都是調用Thread.start()啟動線程
?
2)不同點
Callable可以返回執行結果,是個泛型,與Future、FutureTask配合可以通過FutureTask.get()獲取異步執行的結果,但是Runnable不可以。
Callable里面有取消這個任務,而且異??梢酝鈷?#xff0c;但是Runnable異常只能內部run消化。
FutureTask.get()得到異步執行的結果,此方法會阻塞主進程的繼續往下執行。
?
?
?
3 Callable測試用例
import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;public class TestCallableAndFuture {public static void main(String[] args) {//構建CallableCallable<String> callable = new Callable<String>() {@Overridepublic String call() throws Exception {Thread.sleep(2000);return "chenyu callable finish";}};//構建FutureTaskFutureTask<String> futureTask = new FutureTask<>(callable);//運行線程new Thread(futureTask).start();try {System.out.println("chenyu begin");System.out.println(futureTask.isDone());//futureTask.cancel(true);if (!futureTask.isCancelled()) {System.out.println(futureTask.get());System.out.println(futureTask.isDone());System.out.println("chenyu end");} else {System.out.println("the thread is cancel");}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}} }?
?
?
?
?
4 運行結果
如果注釋掉// futureTask.cancel(true)運行結果如下
chenyu begin false chenyu callable finish true chenyu end如果不注釋掉futureTask.cancel(true)運行結果如下
chenyu begin false the thread is cancel?
總結
以上是生活随笔為你收集整理的Java之Callable和Runnable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java之new一个对象简单过程
- 下一篇: Java之多线程里面的锁理解以及sync