linkedin parseq是一个开源的java异步框架,主要特点是对其他的库依赖很小。除了以来log4j进行日志的处理之外,不需要依赖其他的库。
一个简单的使用例子:
package com.xiaomi.eeee.mt;
import com.linkedin.parseq.BaseTask;
import com.linkedin.parseq.Context;
import com.linkedin.parseq.Engine;
import com.linkedin.parseq.EngineBuilder;
import com.linkedin.parseq.Task;
import com.linkedin.parseq.TaskLog;
import com.linkedin.parseq.promise.Promise;
import com.linkedin.parseq.promise.PromiseException;
import com.linkedin.parseq.promise.PromiseListener;
import com.linkedin.parseq.promise.PromiseUnresolvedException;
import com.linkedin.parseq.promise.Promises;
import com.linkedin.parseq.trace.Related;
import com.linkedin.parseq.trace.ShallowTrace;
import com.linkedin.parseq.trace.Trace;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestMath {
final int numCores = Runtime.getRuntime().availableProcessors();
final ExecutorService taskScheduler = Executors.newFixedThreadPool(numCores + 1);
final ScheduledExecutorService timerScheduler = Executors.newSingleThreadScheduledExecutor();
final Engine engine = new EngineBuilder()
.setTaskExecutor(taskScheduler)
.setTimerScheduler(timerScheduler)
.build();
public static void main(String[] args) throws InterruptedException{
new TestMath().test();
}
public void test() throws InterruptedException{
Task<String> task = new BaseTask<String>(){
@Override
protected Promise<? extends String> run(Context context) throws Exception {
// TODO Auto-generated method stub
System.out.println("this is a running test");
return Promises.value("this is a return");
}
};
engine.run(task);
task.await();
System.out.println(task.isDone());
System.out.println(task.get());
engine.shutdown();
engine.awaitTermination(1, TimeUnit.SECONDS);
taskScheduler.shutdown();
timerScheduler.shutdown();
}
}
可以看到,整个库使用起来很简单,创建一个basicTask,然后通过engine运行task,调用await等待任务执行完成,最后获得执行的结果。