下面的代码实现了在一分钟内以2秒为周期周期写入log的功能:
package com.techlog.test.service;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* Created by techlog on 16/8/16.
*/
@Service
public class Beep {
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Beep.class);
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public void beepForOneMinute() {
final ScheduledFuture> beeperHandle = scheduler.scheduleAtFixedRate(() -> LOGGER.info("deep"), 2, 2, TimeUnit.SECONDS);
scheduler.schedule(() -> { beeperHandle.cancel(true); scheduler.shutdown(); }, 1, TimeUnit.MINUTES);
}
}
可以看到,方法中只用两行代码就实现了一个定时器的周期计时与取消,这主要得益于 lamda 表达式的简洁特性: