0

I have web service and web service calls are handled by a Thread, so that they can run asynchronously, and also time out. But the thread is “runnable” and not “callable” so the thread cannot pass back the web service response.

I have read statement that we need to use a callable.Is their any way to return response from my runnable thread.I am posting small example can we make it to return value.

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

}
4

3 回答 3

4

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

于 2013-08-23T06:24:19.463 回答
2

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

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

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

于 2013-08-23T08:26:39.360 回答
0

您不能从线程返回值。但您可能有兴趣查看和使用SwingWorker. 它使您能够在后台运行一些工作,并且可以在使用它的doneget方法完成后返回一些东西。

这里有更多细节

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

于 2013-08-23T06:24:26.533 回答