JAVA非同期呼び出し
1801 ワード
つまり、Aはシステムのワークフローを呼び出し、システムワークフローはフィードバックBを完了し、これは非同期のプロセスである.今同期したいのは、Aがワークフローを起動してから停止し、Bがコールバックされるのをずっと待っていて、タイムアウト時間を設定して、タイムアウトAがエラーを返したら;そうでなければ成功に戻ります.
Bリクエストを受けるたびにデータを入れる
Aタイムアウト処理が完了しなければデータを削除する
Aこちらに集合を設ける
集合に作業指示IDがある場合のみ結果を返し、このIDを集合からREMOVE調
Bが来るとAはADD一つ
Bリクエストを受けるたびにデータを入れる
Aタイムアウト処理が完了しなければデータを削除する
Aこちらに集合を設ける
集合に作業指示IDがある場合のみ結果を返し、このIDを集合からREMOVE調
Bが来るとAはADD一つ
public class AClient2C2 {
private final long timeout = 10000;
public void test(String taskId) {
long count = 0;
while (BService2C2.getInstance().isHasTask(taskId) && count < timeout) {
try {
System.out.println("wait+"+count);
Thread.sleep(1000);
count += 1000;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(count>=timeout) {
System.out.println(" ");
}
}
public static void main(String[] args){
BService2C2.getInstance().regesitTaskId("aaaa");
AClient2C2 ac = new AClient2C2();
ac.test("aaaa");
BService2C2.getInstance().removeTaskId("aaaa");
}
}
import java.util.HashMap;
import java.util.Map;
public class BService2C2 {
private static BService2C2 instance;
private static Map<String,String> map = new HashMap<String,String>();
private BService2C2() {
}
public static BService2C2 getInstance(){
if(instance==null){
instance = new BService2C2();
}
return instance;
}
public void regesitTaskId(String taskId){
map.put(taskId, taskId);
}
public void removeTaskId(String taskId){
map.remove(taskId);
}
public boolean isHasTask(String taskId){
if(null!=map.get(taskId)){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}