为了不影响主业务场景的运行速度,我们经常开另外一个线程去做辅助的工作。如下,做一个记录。
在一个方法中开辟一个新的线程类:
向新的线程类中传递一个zznm参数。
Runner run = new Runner(zznm);// 组织内码// 这里new了一个线程类的对象出来
Thread thread = new Thread(run);// 要启动一个新的线程就必须new一个Thread对象出来,这里使用的是Thread(Runnabletarget) 这构造方法
thread.start();// 启动新开辟的线程,新线程执行的是run()方法,新线程与主线程会一起并行执行
新的线程类的实现:
利用构造方法进行参数的接受。
class Runner implements Runnable {
String zznm;
public Runner(String zznm) {
this.zznm = zznm;
}
public void run() {
SMSCode sms = null;
String sysl = "0";
// 查询短信剩余条数
List mesNum = smsSendDao.getSmsMessageNum(zznm);
if (mesNum != null && mesNum.size() != 0) {
Map tempMap = (HashMap) mesNum.get(0);
sysl = (String) tempMap.get("KDDXSL_SYSL");// 获取单位短信剩余数量
}
// 短信数量是否够未来10天用的
// 查询前三天使用短信数量
String threeDayNum = smsSendDao.getSmsSendHistory(zznm);
if (!threeDayNum.equals("0")) {
int numDay = Integer.parseInt(sysl) / (Integer.parseInt(threeDayNum) /3);
if (numDay < 10) {
// 今日是否给工作人员发送短信
List<Map<String,Object>> smsSendType4List =
smsSendDao.getSmsSendType4History(zznm);
if (smsSendType4List != null && smsSendType4List.size() != 0) {
// 今天已经提醒过管理员,不再进行提示
} else {
Map<String, Object> paraMap = new HashMap<String, Object>();
paraMap.put("zznm", zznm);
String lkdh = null;
List<Map<String, Object>> lkxx = smsSendDao.getLkxx(paraMap);
if (lkxx != null && lkxx.size() != 0) {
Map<String, Object> map = lkxx.get(0);
lkdh = (String) map.get("KDJBXX_LXFS");
}
// 给工作人员发送短信sendDxsyl
sms = smsInterface.sendDxsyl(lkdh, sysl, zzmc);
if (SMSUtils.SEND_SUCCESS.equals(sms.getStatus())) {
// 保存短信发送历史记录,并更新短信可用剩余数量
SMSSendHistory(sms, lkdh, "4", zznm);
} else {
// 发送短信失败
sms = new SMSCode();
sms.setStatus(SMSUtils.SEND_FAILED_UNKNOWN);
// return sms;
}
}
}
}
}
}