java异步并发执行实现方法,如上传多文件等待全部结束再返回

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;

}


分享到:


相關文章: