java_多线程调用笔记3
/**
* 任务服务类,继承ExecutorCompletionService
*/
public class ThreadGroupService<V> {
private AtomicInteger size = new AtomicInteger();// 线程个数计数
private String threadGroupName = null; //任务名
private boolean end = false;//线程结束标志
private ConcurrentLinkedQueue<Future<V>> futureQueue = new ConcurrentLinkedQueue<Future<V>>();//任务结果列表
private boolean isRuning = false;//当前任务是否处于排队状态,true表示排队
private Date time = null;//开始时间
private int order = 0;// 排队序号
/**
* 初始化任务
* @param threadGroupName 任务名
* @param isBusy 是否忙
* @param order
*/
public ThreadGroupService(String threadGroupName,boolean isBusy,int order) {
this.threadGroupName = threadGroupName;
this.isRuning = !isBusy; //忙时,设置非运行状态
this.order = order;
this.time = new Date();
}
public Future<V> submit(Callable<V> task,ThreadPoolExecutor threadPool) {
size.incrementAndGet();
Future<V> future = threadPool.submit(task);
futureQueue.offer(future);
return future;
}
/**
* 是否处于运行状态
* @return
*/
public boolean isRuning() {
return isRuning || futureQueue.peek().isDone();
}
/**
* 查询符合条件任务
* @param threadGroupName
* @param queue
* @return
*/
public static ThreadGroupService<String> getThreadGroup(
String threadGroupName, List <ThreadGroupService<String>> queue) {
int len = queue.size();
for(int i =0 ;i<len; i++ ){
ThreadGroupService<String> service = queue.get(i);
if(service.getThreadGroupName().equals(threadGroupName)){
return service;
}
}
return null;
}
public ConcurrentLinkedQueue<Future<V>> getFutureQueue() {
return futureQueue;
}
public void setOrder(int order) {
this.order = order;
}
public int getSize() {
return size.get();
}
public int getOrder() {
return this.order;
}
public String getThreadGroupName() {
return threadGroupName;
}
public void setEnd() {
this.end = true;
}
public boolean isEnd() {
return this.end;
}
public Date getTime() {
return time;
}
}

浙公网安备 33010602011771号