您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java中Runnable與Callable接口有什么區別”,在日常操作中,相信很多人在Java中Runnable與Callable接口有什么區別問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中Runnable與Callable接口有什么區別”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Java中的線程對象是Thread,新建線程也只有通過創建Thread對象的實例來創建。
先說結論
1 Runnable沒有返回值的FunctionalInterface(jdk 1.8概念)接口,相反Callable是有返回值的FunctionalInterface接口
2 Runnable + Thread 創建一個無返回結果的任務線程
3 Runnable + Callable +Thread 創建一個有返回結果的任務線程
創建一個無返回結果的任務線程,so eazy !!!!
public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "我是一個無返回結果的任務線程"); } },"線程一:").start(); //start()開啟任務 }
2.1 JAVA異步編程之Callbacks與Futures模型
我是用Executors線程池的方式來創建的。
2.2 用最原始的方法
public class PrimitiveCallable implements Callable, Runnable { public static void main(String[] args) { //實現 new Thread(new PrimitiveCallable(), "線程二:").start(); } @Override public void run() {//Runnable實現 try { Object call = this.call(); System.out.println(call); } catch (Exception exception) { exception.printStackTrace(); } } @Override public Object call() throws Exception { //Callable 實現 return "異步任務返回的結果!!!"; } }
2.3 FutureTask 一種jdk的實現方式
public class FutureTask<V> implements RunnableFuture<V> { //RunnableFuture 實現了以上2個接口 ........省略......... public void run() { //重寫run實現 if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return; try { Callable<V> c = callable; //構建對象是傳入的參數 if (c != null && state == NEW) { V result; boolean ran; try { result = c.call(); //調用任務并返回結果 ran = true; } catch (Throwable ex) { result = null; ran = false; setException(ex); //設置異常時的結果 } if (ran) set(result); //設置結果 } } finally { runner = null; int s = state; if (s >= INTERRUPTING) handlePossibleCancellationInterrupt(s); } } ........省略......... }
1 不要糾結有幾種創建線程的方法了,就一種即通過Thread,但Thread有9個構造函數方法
2 9個構造函數方法
public Thread() public Thread(Runnable target) Thread(Runnable target, AccessControlContext acc) public Thread(ThreadGroup group, Runnable target) public Thread(String name) public Thread(ThreadGroup group, String name) public Thread(Runnable target, String name) public Thread(ThreadGroup group, Runnable target, String name) public Thread(ThreadGroup group, Runnable target, String name, long stackSize)
到此,關于“Java中Runnable與Callable接口有什么區別”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。