DelayQueue是一个延时队列,在没有第一时间获取到目标后,不会直接返回,而是会等一段时间,如果这段时间内还没获取到,再返回
//队列
public class UserTask {
private static DelayQueue<User> queue = new DelayQueue<>();
public static DelayQueue<DelayTask> getQueue() {
return queue;
}
}
//队列检查
@Slf4j
public class CheckTask implements Runnable {
private final UserMapper userMapper;
public CheckTask(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public void run() {
while (true) {
try {
DelayTask delayTask = UserTask.getQueue().take();
if (delayTask != null) {
UserInfo userInfo = new UserInfo();
userInfo.setId(delayTask.getAccountId());
userInfo.setIsFrozen(1);
userMapper.updateById(userInfo);
log.info("冻结");
} else {
log.info("delayTask为null");
}
Thread.sleep(10000);
} catch (Exception e) {
log.error(e.getMessage());
}
}
}
}