/**
*
*/
package com.alibaba.doris.client.tools.concurrent;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
/**
* @author raymond
*/
public class ParralelTaskImpl implements ParralelTask {
int no;
long start;
long end;
protected boolean needPofiling;
protected CountDownLatch startCountDownLatch;
protected CountDownLatch resultCountDownLatch;
protected PermMeter permMeter;
public ParralelTaskImpl() {
}
public ParralelTaskImpl(int no, long start, long end, CountDownLatch countDownLatch,
CountDownLatch resultCountDownLatch) {
this.no = no;
this.start = start;
this.end = end;
this.startCountDownLatch = countDownLatch;
this.resultCountDownLatch = resultCountDownLatch;
}
public void setPermMeter(PermMeter permMeter) {
this.permMeter = permMeter;
}
public void setNo(int no) {
this.no = no;
}
public int getNo() {
return no;
}
public long getStart() {
return start;
}
public void setStart(long start) {
this.start = start;
}
public long getEnd() {
return end;
}
public void setEnd(long end) {
this.end = end;
}
public void setNeedProfiling(boolean needPofiling) {
this.needPofiling = needPofiling;
}
public boolean isNeedPofiling() {
return needPofiling;
}
public void run() {
startCountDownLatch.countDown();
for (long i = start; i <= end; i++) {
long startTime = System.currentTimeMillis();
if (needPofiling) {
permMeter.startRecord();
}
doRun(i);
if (needPofiling) {
permMeter.endRecord();
long endTime = System.currentTimeMillis();
long ellapseTime = endTime - startTime;
permMeter.addItem(ellapseTime);
// permMeter.printReport();
}
}
resultCountDownLatch.countDown();
}
public void doRun(long index) {
try {
Random random = new Random();
Thread.sleep(random.nextInt(500));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Atom.doRun[" + no + "-" + start + "," + end + "]" + index);
}
public CountDownLatch getCountDownLatch() {
return startCountDownLatch;
}
public void setCountDownLatch(CountDownLatch countDownLatch) {
this.startCountDownLatch = countDownLatch;
}
public CountDownLatch getResultCountDownLatch() {
return resultCountDownLatch;
}
public void setResultCountDownLatch(CountDownLatch resultCountDownLatch) {
this.resultCountDownLatch = resultCountDownLatch;
}
public PermMeter getPermMeter() {
return permMeter;
}
public void setNeedPofiling(boolean needPofiling) {
this.needPofiling = needPofiling;
}
}