1、类成员变量
Lock lock = new ReentrantLock();
2、设置尝试时间,如果在此时间内不能获得锁就返回前台
boolean isLock = lock.tryLock(5, TimeUnit.SECONDS);
PrintWriter pw = resp.getWriter();
if (!isLock) {
JSONObject result = new JSONObject();
result.put("blocked", "importUsersByExcels.blocked");
result.put("message", Message.msg(Message.Type.SUCCESS));
pw.write(result.toString());
return;
}
3、解锁
finally{
try {
if (isLock) {
// 尝试锁在解除锁标记的时候,一定要判断是否获取到锁标记。
// 如果当前线程没有获取到锁标记,会抛出异常。
lock.unlock();
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
//线程组 private ScheduledExecutorService service = Executors.newScheduledThreadPool(3); @PostConstruct private void doLogin() { service.scheduleWithFixedDelay(new Runnable() { @Override public void run() { try { }catch (Exception e){ logger.warn("登陆失败:"+e.getMessage(),e); } } }, 0, (checkStateTime == null || checkStateTime == 0) ? 10 : checkStateTime * 60 * 1000, TimeUnit.MILLISECONDS); }