Thread.sleep は精度低いから使わないのだけど、、

それでも、これしかないという時の為に、、、

public static Consumer<Integer> sleepSecApprox(long precision){
    return t->{
        LocalDateTime tc =  LocalDateTime.now().plusSeconds(t);
        while(tc.compareTo(LocalDateTime.now()) > 0){
            try{
                Thread.sleep(precision);
            }catch(InterruptedException e){
            }
        }
    };
}

long precision に、できるだけ小さい値(msec)を指定する。

30秒 sleep したい時、、、

sleepSecApprox(100).accept(30);

だいたい、0.1 秒くらい over する。。