单线程使用、同步
项目环境:
项目中有一个1分钟轮询的Job,每次轮询会启动一个线程(Thread)
但是会出现1分钟内,这个线程的工作不能处理完毕,下一个轮询的线程就进来了,会造成数据多次处理。这不是我想要的
在这种环境下,考虑到需要使用synchronized(同步锁)
确保数据的的唯一性和准确性。
/**
* 定时处理批任务
*
* @author: lgoodbook
* @data 2015年11月2日 上午10:15:20
* @version V1.0
*/
public class ProcessJob implements Job {
private static final Logger logger = LoggerFactory
.getLogger(ProcessJob.class);
@Resource
private BatchService batchService;
public void start() {
logger.info("Start Process");
MyThread thread = new MyThread();
thread.start();
}
// 自动 处理 内部类
class MyThread extends Thread {
private Logger logger = LoggerFactory.getLogger(MyThread.class);
public void run() {
//线程同步
synchronized(batchService){
logger.info("任务线程调度开始:" + new Date());
// 处理未处理 、需重复处理的批次
batchService.startProcess();
}
}
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
logger.info("Kick your ass and fuck your mother");
}
}
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
以上代码还有待改进