我有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();
}
}
答案 0 :(得分:4)
您应该将回调传递给Thread
,线程可以在完成后使用值调用回调。
答案 1 :(得分:2)
您可以使用ExecutorService接口,而不是使用显式线程。
您可以使用Executors
类对其进行实例化,然后调用submit
并向其传递Callable
。这将开始在Callable
中的另一个线程中运行代码,并立即返回Future
对象。
然后,您可以在get
上调用Future
,以便等待Callable
的异步执行完成,并检索其结果。
答案 2 :(得分:0)
您无法从线程返回值。但您可能有兴趣查看和使用SwingWorker
。它使您能够在后台运行一些工作,并在使用done
和get
方法完成后返回一些内容。
另一种方法是在线程开始运行之前定义一个变量,并在线程的run
方法中为它赋值。这样,当线程完成时,您将能够使用该变量。 但再次,您必须处理所有concurrency
和locks
以及其他内容。