2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果您正在觀看的結(jié)果是異步產(chǎn)生的,那么一切都很好。異步工作在其自己的單獨(dú)時(shí)間線上完成。根據(jù)定義,任務(wù) #1 啟動(dòng)的異步工作可能要等到任務(wù) #1、2 和 3 全部完成(例如)之后很久才能完成。
異步意味著“不要等我”
你提到:
MyTask 執(zhí)行一些異步操作
異步執(zhí)行意味著調(diào)用代碼不需要等待異步操作完成。
調(diào)用代碼,即您提交給執(zhí)行器服務(wù)的任務(wù),請(qǐng)求完成異步工作,任務(wù)立即繼續(xù)。如果該任務(wù)沒(méi)有進(jìn)一步的工作,則該任務(wù)已完成。所以執(zhí)行器服務(wù)可以繼續(xù)。
執(zhí)行器服務(wù)繼續(xù)進(jìn)行。執(zhí)行器服務(wù)執(zhí)行第二個(gè)提交的任務(wù)。同時(shí),上面請(qǐng)求的異步工作可能還沒(méi)有完成。也許異步工作正在等待資源,例如等待網(wǎng)絡(luò)上的調(diào)用返回,或者異步工作正在等待數(shù)據(jù)庫(kù)查詢執(zhí)行。根據(jù)異步的定義,這不會(huì)阻止提交給執(zhí)行程序的任務(wù)。執(zhí)行器服務(wù)現(xiàn)在正在運(yùn)行第二個(gè)提交的任務(wù),可能是第三個(gè)或第四個(gè),最后,您的異步工作完成。
功能,而不是錯(cuò)誤
換句話說(shuō),一個(gè)特性,而不是一個(gè)錯(cuò)誤。ExecutorService
返回的 by履行Executors.newSingleThreadExecutor()
了“任務(wù)保證按順序執(zhí)行”的承諾。作為副產(chǎn)品,其中一項(xiàng)任務(wù)衍生出異步工作這一事實(shí)并沒(méi)有改變提交的任務(wù)確實(shí)按其順序執(zhí)行的事實(shí)。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
由于保證執(zhí)行順序是連續(xù)的,因此您可能沒(méi)有在實(shí)際運(yùn)行的代碼中使用單線程執(zhí)行程序。
作為一種解決方法,請(qǐng)?zhí)峤?em>一個(gè)執(zhí)行兩件事的任務(wù):
executorService.submit(() -> {MyTask1.run(); MyTask2.run();});
添加回答
舉報(bào)