记录笔记
//重写run方法,继承Runnable
public class MissionThread implements Runnable {
@Override
public void run() {
Date currentDate = new Date();
Mission mission = missionService.findMissionById(missionId);
//线程休眠时间,休眠后线程启动,任务开始,将状态改变为进行中
long sleepTime = missionStartTime.getTime() - currentDate.getTime();
try {
Thread.sleep(sleepTime);
mission.setMissionStatus(MISSION_STATUS_START);
//接单状态改成可接单
mission.setMissionUserStatus(MISSION_STATUS);
int updated = missionService.createOrUpdateMission(mission);
//第二次休眠,到任务结束时间,将任务状态改为已经结束
sleepTime = missionEndTime.getTime() - missionStartTime.getTime();
Thread.sleep(sleepTime);
mission.setMissionStatus(MISSION_STATUS_END);
//接单状态改成不能接单
mission.setMissionUserStatus(MISSION_STATUS_DEFAULT);
updated = missionService.createOrUpdateMission(mission);
} catch (InterruptedException e) {
log.warn(missionId+mission.getMissionName()+":我的线程已经被主人在"+new Date()+"中断了!");
//e.printStackTrace();
}
}
}
//执行线程
Thread thread = new Thread(new MissionThread(missionService, mission.getMissionStartTime(), mission.getMissionEndTime(), missionId));
thread.setName("mission"+missionId);
thread.start();
log.warn("mission线程中:"+missionId+"开始启动咯");
//中断线程
public ServiceResult stop(String missionId){
Mission mission = missionService.findMissionById(missionId);
mission.setMissionStatus(MISSION_STATUS_DEFAULT);
missionService.createOrUpdateMission(mission);
String threadName = "mission"+missionId;
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
int threadNum= threadGroup .activeCount();
Thread[] threadList = new Thread[threadNum];
threadGroup .enumerate(threadList);
for(int i = 0;i < threadNum;i++){
if(threadList[i].getName().equals(threadName)){
threadList[i].interrupt();//不建议使用stop
log.warn(new Date()+"====停止任务ID为"+threadList[i].getName()+"的线程");
return ServiceResult.success("取消成功");
}
}
return ServiceResult.success("取消失败");
}