執行緒池submit和execute方法區別(類似callable和runnable)
執行緒池中的execute方法大家都不陌生,即開啟執行緒執行池中的任務。還有一個方法submit也可以做到,它的功能是提交指定的任務去執行並且返回Future物件,即執行的結果。下面簡要介紹一下兩者的三個區別:
1、接收的引數不一樣
2、submit有返回值,而execute沒有
用到返回值的例子,比如說我有很多個做validation的task,我希望所有的task執行完,然後每個task告訴我它的執行結果,是成功還是失敗,如果是失敗,原因是什麼。
然後我就可以把所有失敗的原因綜合起來發給呼叫者。
個人覺得cancel execution這個用處不大,很少有需要去取消執行的。
而最大的用處應該是第二點。
3、submit方便Exception處理
意思就是如果你在你的task裡會丟擲checked或者unchecked exception,
而你又希望外面的呼叫者能夠感知這些exception並做出及時的處理,那麼就需要用到submit,通過捕獲Future.get丟擲的異常。
相關推薦
執行緒池submit和execute方法區別(類似callable和runnable)
執行緒池中的execute方法大家都不陌生,即開啟執行緒執行池中的任務。還有一個方法submit也可以做到,它的功能是提交指定的任務去執行並且返回Future物件,即執行的結果。下面簡要介紹一下兩者的三個區別: 1、接收的引數不一樣 2、submit有返回值,而execute沒有 用到返
一心多用多執行緒-細談java執行緒池submit與execute的區別
深夜學習,發現ThreadPoolExecutor裡面一個小知識點,故開熱點連wifi怒寫submit與execute方法的區別。 1.問題的來源 在看書的時候,涉及到java執行緒池問題的時候常常面臨這樣一個問題。當定義了一個Runnable物件想提交
執行緒池ExecutorService 中併發數的(引入訊號量Semaphore)控制執行
檢視本機處理器的核心數程式碼:Runtime.getRuntime().availableProcessors() 所以,應用程式的最小執行緒數應該等於可用的處理器核數。如果所有的任務都是計算密集型的,則建立處理器可用的核心數那麼多執行緒就可以了。在這種情況下
執行緒池的submit和execute方法區別
執行緒池中的execute方法大家都不陌生,即開啟執行緒執行池中的任務。還有一個方法submit也可以做到,它的功能是提交指定的任務去執行並且返回Future物件,即執行的結果。下面簡要介紹一下兩者的三個區別: 1、接收的引數不一樣 2、submit有返回值,而exe
血的教訓--如何正確使用執行緒池submit和execute方法
血的教訓之背景:使用執行緒池對存量資料進行遷移,但是總有一批資料遷移失敗,無異常日誌列印 凶案起因 聽說parallelStream並行流是個好東西,由於日常開發stream序列流的場景比較多,這次需要寫遷移程式剛好可以用得上,那還不趕緊拿來裝*一下,此時不裝更待何時。機智的我還知道在 JVM 的後臺
執行緒池 submit 和 execute
publicclass RunnableTestMain { public staticvoid main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(2
Junit單元測試+aop+spring+執行緒池,在進行Junit測試時切面中執行緒池內呼叫的方法不執行
一、問題背景: 寫了一個切面,指向某service包下的所有類及方法,當該service包下方法被呼叫時切面執行,切面中用了執行緒池ExecutorService pool = Executors.newFixedThreadPool(5);執行緒池內呼叫了dao層的方法。 二、問題描述:單
使用C++11實現執行緒池的兩種方法
概述:什麼是執行緒池? 因為程式邊執行邊建立執行緒是比較耗時的,所以我們通過池化的思想:在程式開始執行前建立多個執行緒,這樣,程式在執行時,只需要從執行緒池中拿來用就可以了.大大提高了程式執行效率. 如何實現: 一般執行緒池都會有以下幾個部分構成: 1. 執行
從阿里Java開發手冊學習執行緒池的正確建立方法
前言 最近看阿里的 Java開發手冊,上面有執行緒池的一個建議: 【強制】執行緒池不允許使用 Executors 去建立,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。 結合最近面試的經歷,發現這
Java 建立執行緒池的四種方法
Java通過Executors提供四種執行緒池,分別為:newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大併發
hibernate中executeFind()方法和execute()方法區別
返回型別不同:executeFind()方法返回集合,execute()方法返回物件 轉載地址 executeFind方法 @Override public List<TCpContact> getCpContactByPage(final Map<
執行緒池系列一:執行緒池作用及Executors方法講解
執行緒池的作用: 執行緒池作用就是限制系統中執行執行緒的數量。 根據系統的環境情況,可以自動或手動設定執行緒數量,達到執行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用執行緒池控制執行緒數量,其他執行緒 排隊等候。一個任務執行完畢,再
Executors工具類 4種獲取執行緒池服務物件的方法
java中目前我只瞭解4 種獲得多執行緒的方法 : 1.繼承Thread類 ,重寫run方法 2.new Thread(實現Runnable介面) 3.FutureTask ft = new FutureTask<Integer>(new MyThread())
執行緒池newFixedThreadPool的使用方法
新的執行緒加入後,如果正在執行的執行緒達到了上限,則會阻塞,直到有了空閒的執行緒來執行。 import java.util.Random; import java.util.concurrent.ExecutorService; import java.util
執行緒池續:你必須要知道的執行緒池submit()實現原理之FutureTask!
![FutureTask思維導圖.png](https://img2020.cnblogs.com/other/799093/202006/799093-20200601101441232-1248184493.png) ### 前言 上一篇內容寫了`Java`中執行緒池的實現原理及原始碼分析,說好的是實
【Java多執行緒】執行緒池的工作原理詳解(下)
接著上篇文章,我接下來繼續介紹執行緒池的工作原理,如果你還沒有看上篇,我建議最好瀏覽一下:執行緒池的工作原理詳解(上) Executors 工具類 1.定義 Executors是java執行緒池的工廠類,通過它可以快速初始化一個符合業務需求的執行緒池。
freopen和fopen的區別(檔案操作輸入輸出)
C語言中freopen()函式是用來重新定向的,所謂重新定向是給輸入和輸出的位置重新定向。原本輸入位置是鍵盤快取區,輸出在螢幕上,用了重新定向後可以將輸入位置改變成一個檔案,而輸出位置也可以輸出到一個檔案中,具體程式碼可以這麼寫: freopen ("text.txt"
堆和棧的區別(非常經典的文章)
一、預備知識—程式的記憶體分配 一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。 2、堆區(heap) — 一般由程式設計師分配釋放, 若程式設
ES6和ES5語法區別(Reflect物件和Object物件 )
概述 Reflect物件與Proxy物件一樣,也是 ES6 為了操作物件而提供的新 API。 現階段,某些方法同時在Object和Reflect物件上部署,未來的新方法將只部署在Reflect物件上。也就是說,從Reflect物件上可以拿到語言內部的方法。
Log4j和Log4j2的區別(SpringBoot中配置使用)
前言: 日誌的級別: 預設的幾個級別:trace<debug<info<warn<error<fatal 說明: 1.級別之間是包含關係,意思是如果你設定日誌級別是trace,則大於等於這個級別的日誌都會輸出。 2.trace:追