2 Star 2 Fork 5

Realfighter / xx566-diary

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
FutureCallbackTest.java 2.19 KB
一键复制 编辑 原始数据 按行查看 历史
Realfighter 提交于 2015-03-18 17:52 . DH密钥交换算法实现与测试
package guava;
import com.google.common.util.concurrent.*;
import org.junit.Test;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
/**
* FutureCallback: 用于处理任务执行结果的接口
* 对ListenableFuture. addListener缺陷的弥补
* 文章地址:http://www.xx566.com/detail/159.html
* User: Realfighter
* Date: 2014/11/4
* Time: 20:42
*/
public class FutureCallbackTest {
@Test
public void testFutureCallback() {
// 创建一个线程缓冲池Service
ExecutorService executor = Executors.newCachedThreadPool();
//创建一个ListeningExecutorService实例
ListeningExecutorService executorService =
MoreExecutors.listeningDecorator(executor);
//提交一个可监听的线程
ListenableFuture<String> futureTask = executorService.submit
(new Callable<String>() {
@Override
public String call() throws Exception {
return "Task completed";
}
});
FutureCallbackImpl callback = new FutureCallbackImpl();
//线程结果处理回调函数
Futures.addCallback(futureTask, callback);
//如果callback中执行的是比较费时的操作,Guava建议使用以下方法。
// Futures.addCallback(futureTask,callback,executorService);
//处理后的线程执行结果:"Task completed successfully"
assertThat(callback.getCallbackResult(), is("Task completed successfully"));
}
class FutureCallbackImpl implements FutureCallback<String> {
private StringBuilder builder = new StringBuilder();
@Override
public void onSuccess(String result) {
builder.append(result).append(" successfully");
}
@Override
public void onFailure(Throwable t) {
builder.append(t.toString());
}
public String getCallbackResult() {
return builder.toString();
}
}
}
Java
1
https://gitee.com/realfighter/xx566-diary.git
git@gitee.com:realfighter/xx566-diary.git
realfighter
xx566-diary
xx566-diary
master

搜索帮助