现在,我有一段代码与另一台服务器联系,询问项是否在列表中,并根据返回的值返回一个布尔值。
代码如下:
public boolean checkIfOnline(int accountId) {
//First loop is incase if someone is already checking. Second is for the checking that this account is doing.
while (isCheckingIfOnline) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
isCheckingIfOnline = true;
sendCheckIfOnline(accountId);
while (isCheckingIfOnline) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
return onlineResponse;
}
onlineResponse和isCheckingIfOnline在一个处理其他服务器返回的方法中被更改,这是我一起抛出的方法让系统等待另一个服务器响应。显然,这是非常有缺陷的,因为当经常调用此方法时,它会减慢系统速度,因为它只允许一次一个查询,当它应该允许同时执行多个查询时。
我可以使用哪种方法来完成上述代码的操作,但允许一次运行多个查询?
编辑:为了进一步说明,checkIfOnline获取一个帐户ID,并询问另一个服务器是该帐户ID是否在列表中,如果该帐户ID是否在列表中,则其他服务器会响应当前服务器。
答案 0 :(得分:2)
听起来你想要使用Java 6+中的ExecutorService。
ExecutorService要求您向其提交一个实现Callable的类。当您向ES提交Callable时,您会收到一个Future,您可以使用该{{3}}来执行许多操作,包括取消流程或从已完成的流程中获取结果。
我很难理解您要使用代码实现的目标,以及为什么要对特定部分进行操作。话虽这么说,如果你想在那里实现并发,你必须:
仅仅提交任务并在其上调用Future.get()是不够的,因为在该任务完成之前,任何线程都会暂停该调用。
您需要允许Callable调用回调,或者线程执行任务提交的类并允许它坐下并等待future.get()方法返回结果。
祝你好运:)