使线程在java中返回值

时间:2013-08-23 06:15:47

标签: java multithreading

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

我已阅读声明,我们需要使用callable.Is以任何方式从我的runnable线程返回响应。我发布的小例子可以让它返回值。

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

}

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

您无法从线程返回值。但您可能有兴趣查看和使用SwingWorker。它使您能够在后台运行一些工作,并在使用doneget方法完成后返回一些内容。

Here it is in more details

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