`

线程的运用

阅读更多
package com.gctx.schedule;

import java.util.ArrayList;
import java.util.List;

import com.gctx.business.interfaces.IGreetExpService;
import com.gctx.business.interfaces.IGreetPlanService;
import com.gctx.framework.logs.Logit;
import com.zr.pojo.aged.home.ZaghGreetExp;
import com.zr.pojo.aged.home.ZaghGreetPlanExp;



/*********************************************************
* 生成短信任务主线程
*@author zhanjunwei
*
*@since Nov 14, 2011 3:42:12 PM
*
*********************************************************/
public class CreateMessageRootThread implements Runnable {

private Long defPollingTime = 30 * 60 * 1000L;//默认轮询时间

private Integer defMaxvectorLength = 1000;//默认队列大小

private Integer defMaxvectorNum = 10; //默认队列个数
/**---
* 新加
*/
private IGreetExpService igreetexpservice;
private IGreetPlanService igreetplanservice;

public IGreetPlanService getIgreetplanservice() {
return igreetplanservice;
}

public void setIgreetplanservice(IGreetPlanService igreetplanservice) {
this.igreetplanservice = igreetplanservice;
}

public IGreetExpService getIgreetexpservice() {
return igreetexpservice;
}

public void setIgreetexpservice(IGreetExpService igreetexpservice) {
this.igreetexpservice = igreetexpservice;
}



/**---
* 新加
*/

CreateMessageSlaveThread[] createMessageSlaveThreads;
/**
* 构造函数
* @param pollingTime
* @param maxvectorLength
* @param maxvectorNum
*/
public CreateMessageRootThread(Long pollingTime, Integer maxvectorLength,
Integer maxvectorNum ){
this.defPollingTime = pollingTime;
this.defMaxvectorLength = maxvectorLength;
this.defMaxvectorNum = maxvectorNum;
init();
}

public void init() {
createMessageSlaveThreads = new CreateMessageSlaveThread[this.defMaxvectorNum];
for (int i = 0; i < this.defMaxvectorNum; i++) {
CreateMessageSlaveThread createMessageSlaveThread = new CreateMessageSlaveThread();
this.createMessageSlaveThreads[i] = createMessageSlaveThread;
createMessageSlaveThread.start();
}
}

public List<Object> polling() {
//轮询待生成报告列表
// List<Object> list = new ArrayList<Object>();
//
// list.add("111");
// list.add("112");
// list.add("113");
// list.add("114");
List<Object> list = new ArrayList<Object>();
/**
* 获取无计划的列表
*/
List<ZaghGreetExp> greetExpList=igreetexpservice.getAllSendRecordList();
for (ZaghGreetExp zaghGreetExp : greetExpList) {
list.add(zaghGreetExp);
}
System.out.println(greetExpList.size());
List<ZaghGreetPlanExp> greetPlanList=igreetplanservice.getSendGreetPlanList();
for (ZaghGreetPlanExp zaghGreetPlanExp : greetPlanList) {
list.add(zaghGreetPlanExp);

}
System.out.println("--------------------------------------");

return list;
}

public void distributeTask() {
//分发任务
List<Object> list = polling();
if (list == null) {
return;
}
for (Object geu : list) {
int vectorNum = getModuleValue(geu.toString());
if (this.createMessageSlaveThreads[vectorNum].getVectorCount() < defMaxvectorLength) {
this.createMessageSlaveThreads[vectorNum].addTask(geu);
}
}
}

private int getModuleValue(String key) {
long hashCode = (long) key.hashCode();

if (hashCode < 0)
hashCode = -hashCode;
return (int) hashCode % defMaxvectorNum;
}


public void run() {
while (true) {
try {
Logit.debugLog("CreateReportMailRootThread is runing");
distributeTask();
Thread.sleep(defPollingTime);
} catch (Exception e) {
Logit.debugLog("Exception is " + e.getMessage());
continue;
}
}

}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics