首頁常見問題正文

說一下runnable和callable有什么區(qū)別?

更新時間:2023-03-27 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Runnable和Callable都是Java中用來實現(xiàn)多線程的接口。它們都表示可以在一個單獨的線程中執(zhí)行的代碼塊。然而,它們之間有一些區(qū)別。

  Runnable接口只有一個無返回值的run() 方法。它用于定義一個要在單獨線程中執(zhí)行的任務(wù)。當線程執(zhí)行 run()方法時,它將運行任務(wù),但不會返回任何結(jié)果。因此, Runnable接口更適合用于不需要返回結(jié)果的簡單任務(wù)。

  Callable接口也是用于定義可以在單獨線程中執(zhí)行的任務(wù),但是它具有不同的方法簽名。它的call()方法可以返回一個值,并且可以拋出異常。因此, Callable接口更適合需要返回結(jié)果或可能拋出異常的任務(wù)。

1679886628616_runnable和callable有什么區(qū)別?.jpg

  下面是一個簡單的代碼演示,展示如何使用Runnable和Callable接口。

import java.util.concurrent.*;

public class Example {
    
    public static void main(String[] args) throws Exception {
        
        // Create a thread pool with a single thread
        ExecutorService executor = Executors.newSingleThreadExecutor();
        
        // Define a task using a Runnable
        Runnable task1 = () -> {
            System.out.println("Task 1 is running");
        };
        
        // Define a task using a Callable
        Callable<Integer> task2 = () -> {
            System.out.println("Task 2 is running");
            return 42;
        };
        
        // Submit the tasks to the executor
        Future<?> future1 = executor.submit(task1);
        Future<Integer> future2 = executor.submit(task2);
        
        // Wait for the tasks to complete and print their results
        System.out.println("Result of task 1: " + future1.get()); // Prints "Result of task 1: null"
        System.out.println("Result of task 2: " + future2.get()); // Prints "Result of task 2: 42"
        
        // Shut down the executor
        executor.shutdown();
    }
}

  在這個例子中,我們創(chuàng)建了一個單線程的線程池,并分別定義了一個Runnable和一個 Callable任務(wù)。我們將這些任務(wù)提交到線程池中,并使用Future對象來跟蹤任務(wù)的執(zhí)行和返回值。最后,我們等待任務(wù)完成并打印它們的結(jié)果。在任務(wù)完成后,我們關(guān)閉線程池。注意到,task1并不返回任何值,因此我們在等待結(jié)果時只能得到null。相反,task2返回一個整數(shù)值,因此我們可以通過future2.get()得到這個值。

分享到:

Java培訓(xùn)班課程javaee

Python培訓(xùn)機構(gòu)python大數(shù)據(jù)

web前端培訓(xùn)課程升級V8.5web

AI+設(shè)計培訓(xùn)課程ui

大數(shù)據(jù)培訓(xùn)課程cloud

軟件測試培訓(xùn)課程test

c

新媒體運營培訓(xùn)netmarket

產(chǎn)品經(jīng)理培訓(xùn)課程pm

linux培訓(xùn)Linux

movies

智能機器人培訓(xùn)robot

電商視覺設(shè)計課程uids

AI

集成電路應(yīng)用開發(fā)(嵌入式)培訓(xùn)課程jdbc

在線咨詢 我要報名
和我們在線交談!