java怎么获取线程返回值

83次阅读
没有评论

共计 1811 个字符,预计需要花费 5 分钟才能阅读完成。

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;
    }
}

这些方法都可以用来获取线程的返回值,选择哪种方法取决于实际需求和场景。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-13发表,共计1811字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)