优化部分代码

This commit is contained in:
wuweifeng10 2020-01-03 17:13:17 +08:00
parent 9f47bb95ca
commit 24858c8124

View File

@ -78,7 +78,7 @@ public class WorkerWrapper<T, V> {
/**
* 开始工作
* fatherWrapper代表这次work是由哪个上游wrapper发起的
* fromWrapper代表这次work是由哪个上游wrapper发起的
*/
private void work(ThreadPoolExecutor poolExecutor, WorkerWrapper fromWrapper, long remainTime) {
long now = SystemClock.now();
@ -88,7 +88,8 @@ public class WorkerWrapper<T, V> {
beginNext(poolExecutor, now, remainTime);
return;
}
//如果自己已经执行过了可能有多个依赖其中的一个依赖已经执行完了并且自己也执行完了当另一个依赖过来时就不重复处理了
//如果自己已经执行过了
//可能有多个依赖其中的一个依赖已经执行完了并且自己也已开始执行或执行完毕当另一个依赖执行完毕又进来该方法时就不重复处理了
if (getState() != INIT) {
beginNext(poolExecutor, now, remainTime);
return;
@ -101,17 +102,20 @@ public class WorkerWrapper<T, V> {
return;
}
//如果有前方依赖存在两种情况
// 一种是前面只有一个wrapper A -> B
//一种是前面有多个wrapperA C D -> B需要ACD都完成了才能轮到B但是无论是A执行完还是C执行完都会去唤醒B
//所以需要B来做判断必须ACD都完成自己才能执行
/*如果有前方依赖存在两种情况
一种是前面只有一个wrapper A -> B
一种是前面有多个wrapperA C D -> B需要ACD都完成了才能轮到B但是无论是A执行完还是C执行完都会去唤醒B
所以需要B来做判断必须ACD都完成自己才能执行 */
//只有一个依赖
if (dependWrappers.size() == 1) {
doDependsOneJob(fromWrapper);
beginNext(poolExecutor, now, remainTime);
return;
} else {
//有多个依赖时
doDependsJobs(poolExecutor, dependWrappers, fromWrapper, now, remainTime);
}
doDependsJobs(poolExecutor, dependWrappers, fromWrapper, now, remainTime);
}
@ -278,7 +282,7 @@ public class WorkerWrapper<T, V> {
return workResult;
}
try {
//如果已经不是init状态了
//如果已经不是init状态了说明正在被执行或已执行完毕这一步很重要可以保证任务不被重复执行
if (!compareAndSetState(INIT, WORKING)) {
return workResult;
}