摘要:類這是方式啟動的運行結果如下接口這是方式啟動的運行結果如下接口運行結果如下接口和接口的區別可以有返回值。通過包裝成,傳遞給,因為是實現了接口。
類Thread
public class ThreadDemo extends Thread { public static void main(String[] args) { ThreadDemo thread = new ThreadDemo(); thread.start(); } @Override public void run() { System.out.println("這是Thread方式啟動的"); } }
運行結果如下:
public class RunnableDemo implements Runnable { @Override public void run() { System.out.println("這是Runnable方式啟動的"); } public static void main(String[] args) { Thread thread = new Thread(new RunnableDemo()); thread.start(); } }
運行結果如下:
public class CallableDemo implements Callable { @Override public String call() throws Exception { return "Callable"; } public static void main(String[] args) { FutureTaskfutureTask = new FutureTask(new CallableDemo()); Thread thread = new Thread(futureTask); thread.start(); try { System.out.println(futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
運行結果如下:
Callable可以有返回值。
通過FutureTask包裝成Runnable,傳遞給Thread,因為FutureTask是實現了Runnable接口。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75122.html
摘要:在并發編程學習之三種線程啟動方式中有提過。是否執行結束,包括正常執行結束或異常結束。獲取返回值,沒有得到返回值前一直阻塞。運行結果如下由于任務被取消,所以拋出異常。注意的是,此時線程還在跑,和返回的是。并不能讓任務真正的結束。 FutureTask 在java并發編程學習之三種線程啟動方式中有提過。主要的方法如下: cancel(boolean mayInterruptIfRunni...
摘要:與執行方法,是用來啟動線程的,此時線程處于就緒狀態,獲得調度后運行方法。執行方法,相對于普通方法調用,在主線程調用。程序是順序執行的,執行完才會執行下面的程序。 start與run 執行start方法,是用來啟動線程的,此時線程處于就緒狀態,獲得調度后運行run方法。run方法執行結束,線程就結束。 執行run方法,相對于普通方法調用,在主線程調用。程序是順序執行的,執行完才會執行下...
摘要:線程安全問題在并發編程學習之基礎概念提到,多線程的劣勢之一,有個線程安全問題,現在看看下面的例子。那么,該怎么解決呢,很簡單,在方法前加個同步鎖。運行結果如下有兩種情況,是因為看誰先搶占鎖,但是輸出的算法結果是正確的。 線程安全問題 在java并發編程學習之基礎概念提到,多線程的劣勢之一,有個線程安全問題,現在看看下面的例子。 public class NotSafeDemo { ...
摘要:但是的語義不足以確保遞增操作的原子性,在多線程的情況下,線程不一定是安全的。檢查某個狀態標記,以判斷是否退出循環某個方法這邊和用普通的變量的區別是,在多線程的情況下,取到后,的值被改變了,判斷會不正確。 多線程為什么是不安全的 這邊簡單的講述一下,參考java并發編程學習之synchronize(一) 當線程A和線程B同時進入num = num + value; 線程A會把num的值...
摘要:是所有線程池實現的父類,我們先看看構造函數構造參數線程核心數最大線程數線程空閑后,存活的時間,只有線程數大于的時候生效存活時間的單位任務的阻塞隊列創建線程的工程,給線程起名字當線程池滿了,選擇新加入的任務應該使用什么策略,比如拋異常丟棄當前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實現的父類,我們先看看構造函數 構造參數 corePool...
閱讀 1575·2021-11-23 10:01
閱讀 2969·2021-11-19 09:40
閱讀 3214·2021-10-18 13:24
閱讀 3464·2019-08-29 14:20
閱讀 2980·2019-08-26 13:39
閱讀 1276·2019-08-26 11:56
閱讀 2662·2019-08-23 18:03
閱讀 373·2019-08-23 15:35