call方法里执行代码示例如下:
@Override
public DeferredObject call() throws Exception{
DeferredObject deferred = new DeferredObject();
Promise promise = deferred.promise();
promise.done(new DoneCallback() {
public void onDone(Object result) {
try {
Thread.sleep(5000);
objs[id]="200" + id;//保存执行结果 或者
resolve("200"+id)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).fail(new FailCallback() {
public void onFail(Object rejection) {
}
});
return (DeferredObject) deferred.resolve(200);
}
异步并发还有一种方法就是全部都用promise,不用callback,也不用Future,这个github里有代码示例我就不打出来了,用到的是promise.when()方法,这样多个图片上传,多个异步同时执行再也不怕了,节省了大量时间,就是系统开销大一点。
DeferredObject[] objs = new DeferredObject[11];
for (int i = 0; i < 5; i++) {
objs[i] = test(i);
}
PrintWriter out = response.getWriter();
DeferredManager dm = new DefaultDeferredManager();
dm.when(objs[0],objs[1],objs[2],objs[3],objs[4])
.then(new DoneCallback() {
public void onDone(Object result) {
System.out.println("result here " + result);
System.out.println("result here 2 " + result);
out.println("there");
}
}).fail(new FailCallback() {
public void onFail(Object result) {
}
});
public DeferredObject test(int i) {
DeferredObject deferred = new DeferredObject();
Promise promise = deferred.promise();
try {
AVFile file = AVFile.withAbsoluteLocalPath("LeanCloud.png", "D:/home.png");
file.saveInBackground(new SaveCallback() {
@Override
public void done(AVException e) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
deferred.resolve("here " + i);
}
});
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
return deferred;
}
閱讀更多 留學 的文章