我在MyClassB类中有一个方法,它是从MyClassA的方法异步触发的:
public void getProductCall()
{
new Thread(new Runnable() {
@Override
public void run() {
try {
productRequest = service.createS4ProductRequest(getRepriceItems());
//下面是对另一个系统的rest调用String response = pricing.getS4ProductResponse(quote.getAssetQuoteNrAndVrsn(),productRequest); //我正在使用以下2行来检查ClassA的方法,看看这个过程是否已经结束了setProductResponse(response); productPriceProcessEnded = TRUE;
} catch (Exception e) {
productPriceErrorOccured=true;
e.printStackTrace();
}
}
}).start();
}
这是我用来检查上述方法是否完整的MyClassA中的一段代码。
for(int i=0;i<1000000000;i++)
{
if(!networkAsynCalls.isListPriceErrorOccured())
{
if(networkAsynCalls.isListPriceprocessEnded())
{
return networkAsynCalls.getListReponse();
}
else
{
Thread.sleep(250);
continue;
}
}
else
return null;
}
而不是使用这个随机的for循环我可以使用一些内置的方法或服务池或什么?因为,
1)这个方法的线程在另一个类2)在类MyClassB中我有更多这样的方法,所以我需要检查MyClassA中所有方法的状态
谢谢你的帮助。
如果我找不到您要尝试做的事情,则调度一些代码以异步方式运行,然后能够等到它完成(成功或失败)。如果是这种情况,你应该看看Futures。
这是一个基于Javadoc的示例:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
// do stuff
return "result";
}});
此代码创建一个对象“future”,可以调用该对象来执行searcher.search(target)。此时,代码根本不执行。您只需要一个表示可以异步执行的计算的对象。为此,您需要致电:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(future);
这个片段创建了一个Executor
(这是一个由5个线程组成的固定池),然后将未来交给它执行。执行程序将异步运行Future
中的计算。
Future
提供了一些方法(参见Javadoc),等待完成,取消,检查完成状态等。例如,
String result = future.get();
将阻止,无限期地等待结果。 get(10,TimeUnit.SECONDS)将等待10秒,如果未来未完成,则抛出。