在java中使线程返回值

在java中使线程返回值,java,multithreading,Java,Multithreading,我知道web服务和web服务调用由线程处理,因此它们可以异步运行,也可以超时。但是线程是“可运行的”,而不是“可调用的”,因此线程无法传回web服务响应 我已经阅读了我们需要使用可调用线程的声明。这是他们从我的可运行线程返回响应的任何方式。我正在发布一个小示例,我们可以让它返回值吗 public class HelloThread extends Thread { public void run() { System.out.println("Hello from a

我知道web服务和web服务调用由线程处理,因此它们可以异步运行,也可以超时。但是线程是“可运行的”,而不是“可调用的”,因此线程无法传回web服务响应

我已经阅读了我们需要使用可调用线程的声明。这是他们从我的可运行线程返回响应的任何方式。我正在发布一个小示例,我们可以让它返回值吗

public class HelloThread extends Thread {

    public void run() {
        System.out.println("Hello from a thread!");
        String a="Hello";
    }

    public static void main(String args[]) {
        (new HelloThread()).start();
    }

}

您应该将回调传递给
线程
,线程可以在完成时使用值调用回调。

您应该将回调传递给
线程
,线程可以在完成时使用值调用回调。

您不能从线程返回值。但是您可能对查看和使用
SwingWorker
感兴趣。它使您能够在后台运行一些工作,并可以在完成后使用其
done
get
方法返回一些内容


另一种方法是在线程开始运行之前定义一个变量,并在线程的
run
方法中为其赋值。这样,当线程完成时,您将能够使用该变量但是您必须再次处理所有这些
并发
、锁和其他东西。

您不能从线程返回值。但是您可能对查看和使用
SwingWorker
感兴趣。它使您能够在后台运行一些工作,并可以在完成后使用其
done
get
方法返回一些内容


另一种方法是在线程开始运行之前定义一个变量,并在线程的
run
方法中为其赋值。这样,当线程完成时,您将能够使用该变量但是同样,您必须处理所有的
并发
,以及
和其他东西。

您可以使用接口,而不是使用显式线程

您可以使用
Executors
类实例化它,然后调用
submit
并将
Callable
传递给它。这将开始在另一个线程中运行
Callable
中的代码,并立即返回
Future
对象


然后,您可以在
Future
上调用
get
,以等待
Callable
的异步执行完成,并检索其结果。

您可以使用该接口,而不是使用显式线程

您可以使用
Executors
类实例化它,然后调用
submit
并将
Callable
传递给它。这将开始在另一个线程中运行
Callable
中的代码,并立即返回
Future
对象


然后,您可以在
Future
上调用
get
,以等待
Callable
的异步执行完成,并检索其结果。

由于线程异步运行,因此不可能将值从一个线程返回到另一个线程。因此,如果它们在once类中,您可以考虑使用一个全局变量,但在某些情况下,由于线程并行运行,这种方法也不有效。您应该查看interfaceAs线程异步运行,因此没有机会将值从一个线程返回到另一个线程。所以如果它们在once类中,您可以考虑使用一个全局变量,但在线程并行运行的某些情况下,这种方法也无效。您应该了解如何将回调传递给线程将回调作为线程构造函数中的对象传递,并将其存储为线程实例的实例变量(当然,您必须在线程实现中实现构造函数)。如何将回调传递给线程将回调作为线程构造函数中的对象传递,并将其存储为线程实例的实例变量(当然,您必须在线程实现中实现构造函数)。