亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java怎么獲取線程返回值

小億
137
2023-11-06 21:08:23
欄目: 編程語言

Java中獲取線程返回值的常用方法有以下幾種:

  1. 使用Callable接口和Future對象:創建一個Callable對象,并使用ExecutorService的submit方法提交該任務,返回一個Future對象。然后可以通過調用Future對象的get方法來獲取線程的返回值。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Main {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Integer> future = executor.submit(new MyCallable());

        try {
            int result = future.get();
            System.out.println("線程返回值:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 執行耗時任務,返回結果
        return 100;
    }
}
  1. 繼承Thread類并重寫run方法:通過繼承Thread類并重寫run方法,在執行耗時任務后,可以通過定義一個成員變量來保存返回值,然后通過調用該線程對象的join方法來等待線程執行結束,并獲取返回值。
public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();

        try {
            myThread.join(); // 等待線程執行結束
            int result = myThread.getResult();
            System.out.println("線程返回值:" + result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class MyThread extends Thread {
    private int result;

    @Override
    public void run() {
        // 執行耗時任務
        result = 100;
    }

    public int getResult() {
        return result;
    }
}
  1. 使用FutureTask類:可以將Callable對象作為參數傳遞給FutureTask類的構造方法,然后通過調用FutureTask對象的get方法來獲取線程的返回值。
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Main {
    public static void main(String[] args) {
        FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());
        Thread thread = new Thread(futureTask);
        thread.start();

        try {
            int result = futureTask.get();
            System.out.println("線程返回值:" + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 執行耗時任務,返回結果
        return 100;
    }
}

這些方法都可以用來獲取線程的返回值,選擇哪種方法取決于實際需求和場景。

0
邵阳市| 巍山| 新乡市| 连山| 二手房| 阿勒泰市| 洪雅县| 红原县| 建瓯市| 五原县| 微博| 荔浦县| 河南省| 延吉市| 汉沽区| 云霄县| 廉江市| 澄江县| 伽师县| 阿巴嘎旗| 威海市| 嘉禾县| 黎平县| 洛扎县| 新兴县| 潢川县| 衡东县| 太仓市| 诸暨市| 岢岚县| 柞水县| 鲁甸县| 抚州市| 伊金霍洛旗| 南涧| 清流县| 皋兰县| 旬邑县| 曲沃县| 灌阳县| 巴塘县|