在 Java 多線程中,如果需要等待線程執(zhí)行完成并返回結(jié)果,可以使用 Java 的線程同步機(jī)制來實(shí)現(xiàn)。以下是一些常用的方式:
-
使用
join()
方法:可以使用線程的join()
方法來等待線程執(zhí)行完成。在主線程中調(diào)用join()
方法,會(huì)阻塞主線程,直到該線程執(zhí)行完成。在被等待的線程執(zhí)行完成后,可以通過返回值或者其他方式將結(jié)果返回給主線程。Thread t = new MyThread(); t.start(); t.join(); // 等待 t 線程執(zhí)行完成 Object result = ((MyThread) t).getResult(); // 獲取結(jié)果
-
使用
CountDownLatch
:可以使用CountDownLatch
類來實(shí)現(xiàn)線程同步。CountDownLatch
可以讓一個(gè)或多個(gè)線程等待其他線程完成某些操作后再執(zhí)行??梢允褂?countDown()
方法來通知CountDownLatch
一個(gè)線程已經(jīng)完成,然后在等待線程中使用await()
方法等待所有線程完成。CountDownLatch latch = new CountDownLatch(1); Thread t = new MyThread(latch); t.start(); latch.await(); // 等待 MyThread 執(zhí)行完成 Object result = ((MyThread) t).getResult(); // 獲取結(jié)果
在
MyThread
類中,可以在線程執(zhí)行完成后調(diào)用countDown()
方法:文章來源:http://www.zghlxwxcb.cn/news/detail-623949.htmlclass MyThread extends Thread { private CountDownLatch latch; private Object result; public MyThread(CountDownLatch latch) { this.latch = latch; } public void run() { // 線程執(zhí)行任務(wù),并設(shè)置結(jié)果 result = doSomething(); latch.countDown(); // 通知 CountDownLatch } public Object getResult() { return result; } }
-
使用
Future
和Callable
:可以使用 Java 的Future
和Callable
接口來實(shí)現(xiàn)線程的返回值。Future
表示一個(gè)異步計(jì)算的結(jié)果,可以在主線程中等待線程的完成,并獲取結(jié)果。Callable
表示一個(gè)帶有返回值的任務(wù),可以使用FutureTask
類來將Callable
封裝成Future
。文章來源地址http://www.zghlxwxcb.cn/news/detail-623949.htmlExecutorService executor = Executors.newSingleThreadExecutor(); Callable<Object> task = new MyCallable(); Future<Object> future = executor.submit(task); Object result = future.get(); // 等待 MyCallable 執(zhí)行完成,并獲取結(jié)果 executor.shutdown(); // 關(guān)閉線程池 class MyCallable implements Callable<Object> { public Object call() throws Exception { // 執(zhí)行任務(wù),并返回結(jié)果 return doSomething(); } }
到了這里,關(guān)于java多線程怎么同步返回結(jié)果的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!