摘要:類這是方式啟動(dòng)的運(yùn)行結(jié)果如下接口這是方式啟動(dòng)的運(yùn)行結(jié)果如下接口運(yùn)行結(jié)果如下接口和接口的區(qū)別可以有返回值。通過包裝成,傳遞給,因?yàn)槭菍?shí)現(xiàn)了接口。
類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方式啟動(dòng)的"); } }
運(yùn)行結(jié)果如下:
public class RunnableDemo implements Runnable { @Override public void run() { System.out.println("這是Runnable方式啟動(dòng)的"); } public static void main(String[] args) { Thread thread = new Thread(new RunnableDemo()); thread.start(); } }
運(yùn)行結(jié)果如下:
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(); } } }
運(yùn)行結(jié)果如下:
Callable可以有返回值。
通過FutureTask包裝成Runnable,傳遞給Thread,因?yàn)镕utureTask是實(shí)現(xiàn)了Runnable接口。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75122.html
摘要:在并發(fā)編程學(xué)習(xí)之三種線程啟動(dòng)方式中有提過。是否執(zhí)行結(jié)束,包括正常執(zhí)行結(jié)束或異常結(jié)束。獲取返回值,沒有得到返回值前一直阻塞。運(yùn)行結(jié)果如下由于任務(wù)被取消,所以拋出異常。注意的是,此時(shí)線程還在跑,和返回的是。并不能讓任務(wù)真正的結(jié)束。 FutureTask 在java并發(fā)編程學(xué)習(xí)之三種線程啟動(dòng)方式中有提過。主要的方法如下: cancel(boolean mayInterruptIfRunni...
摘要:與執(zhí)行方法,是用來啟動(dòng)線程的,此時(shí)線程處于就緒狀態(tài),獲得調(diào)度后運(yùn)行方法。執(zhí)行方法,相對(duì)于普通方法調(diào)用,在主線程調(diào)用。程序是順序執(zhí)行的,執(zhí)行完才會(huì)執(zhí)行下面的程序。 start與run 執(zhí)行start方法,是用來啟動(dòng)線程的,此時(shí)線程處于就緒狀態(tài),獲得調(diào)度后運(yùn)行run方法。run方法執(zhí)行結(jié)束,線程就結(jié)束。 執(zhí)行run方法,相對(duì)于普通方法調(diào)用,在主線程調(diào)用。程序是順序執(zhí)行的,執(zhí)行完才會(huì)執(zhí)行下...
摘要:線程安全問題在并發(fā)編程學(xué)習(xí)之基礎(chǔ)概念提到,多線程的劣勢(shì)之一,有個(gè)線程安全問題,現(xiàn)在看看下面的例子。那么,該怎么解決呢,很簡(jiǎn)單,在方法前加個(gè)同步鎖。運(yùn)行結(jié)果如下有兩種情況,是因?yàn)榭凑l(shuí)先搶占鎖,但是輸出的算法結(jié)果是正確的。 線程安全問題 在java并發(fā)編程學(xué)習(xí)之基礎(chǔ)概念提到,多線程的劣勢(shì)之一,有個(gè)線程安全問題,現(xiàn)在看看下面的例子。 public class NotSafeDemo { ...
摘要:但是的語(yǔ)義不足以確保遞增操作的原子性,在多線程的情況下,線程不一定是安全的。檢查某個(gè)狀態(tài)標(biāo)記,以判斷是否退出循環(huán)某個(gè)方法這邊和用普通的變量的區(qū)別是,在多線程的情況下,取到后,的值被改變了,判斷會(huì)不正確。 多線程為什么是不安全的 這邊簡(jiǎn)單的講述一下,參考java并發(fā)編程學(xué)習(xí)之synchronize(一) 當(dāng)線程A和線程B同時(shí)進(jìn)入num = num + value; 線程A會(huì)把num的值...
摘要:是所有線程池實(shí)現(xiàn)的父類,我們先看看構(gòu)造函數(shù)構(gòu)造參數(shù)線程核心數(shù)最大線程數(shù)線程空閑后,存活的時(shí)間,只有線程數(shù)大于的時(shí)候生效存活時(shí)間的單位任務(wù)的阻塞隊(duì)列創(chuàng)建線程的工程,給線程起名字當(dāng)線程池滿了,選擇新加入的任務(wù)應(yīng)該使用什么策略,比如拋異常丟棄當(dāng)前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實(shí)現(xiàn)的父類,我們先看看構(gòu)造函數(shù) 構(gòu)造參數(shù) corePool...
閱讀 1646·2021-11-23 10:01
閱讀 3048·2021-11-19 09:40
閱讀 3305·2021-10-18 13:24
閱讀 3562·2019-08-29 14:20
閱讀 3044·2019-08-26 13:39
閱讀 1330·2019-08-26 11:56
閱讀 2756·2019-08-23 18:03
閱讀 439·2019-08-23 15:35