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;

}


分享到:


相關文章: