中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
玛沁县| 安达市| 赤峰市| 湘潭县| 尉犁县| 中江县| 涿鹿县| 射阳县| 体育| 芒康县| 涟水县| 宁都县| 黔西县| 开鲁县| 东阳市| 即墨市| 新泰市| 乳源| 万全县| 五台县| 突泉县| 吴江市| 汕尾市| 宾阳县| 吉水县| 大渡口区| 正阳县| 林周县| 东平县| 博野县| 静宁县| 宜黄县| 济源市| 读书| 灵川县| 康保县| 东莞市| 斗六市| 沅江市| 彩票| 乐安县|