在Java中,要让程序休眠到指定时间,你可以使用java.time
包中的LocalDateTime
类和Thread.sleep()
方法。以下是一个示例:
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class SleepUntilSpecificTime {
public static void main(String[] args) {
try {
// 设置目标时间,例如:2022-01-01 12:00:00
LocalDateTime targetTime = LocalDateTime.of(2022, 1, 1, 12, 0, 0);
// 计算当前时间与目标时间之间的毫秒数
long millisecondsUntilTargetTime = ChronoUnit.MILLIS.between(LocalDateTime.now(), targetTime);
// 如果目标时间已经过去,则不进行休眠
if (millisecondsUntilTargetTime > 0) {
// 休眠到目标时间
Thread.sleep(millisecondsUntilTargetTime);
}
// 目标时间到达后执行的操作
System.out.println("目标时间已到达,执行操作...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这个示例中,我们首先设置了一个目标时间(2022年1月1日12点)。然后,我们计算当前时间与目标时间之间的毫秒数。接下来,我们使用Thread.sleep()
方法让程序休眠指定的毫秒数。最后,当目标时间到达时,执行相应的操作。
在Java中,要确保在休眠期间不触发其他线程,可以使用synchronized
关键字对休眠代码块进行同步。这将确保在休眠期间,其他线程无法访问同步代码块中的资源。以下是一个示例:
public class SleepAndSynchronize {
private static final Object lock = new Object();
public static void main(String[] args) {
new Thread(SleepAndSynchronize::sleepAndSynchronize).start();
new Thread(SleepAndSynchronize::otherThread).start();
}
public static void sleepAndSynchronize() {
synchronized (lock) {
try {
System.out.println("线程1:开始休眠...");
Thread.sleep(5000);
System.out.println("线程1:休眠结束...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void otherThread() {
synchronized (lock) {
System.out.println("线程2:等待线程1休眠结束...");
}
}
}
在这个示例中,我们创建了一个名为lock
的静态对象。sleepAndSynchronize()
方法和otherThread()
方法都使用synchronized
关键字同步,以确保在休眠期间,其他线程无法访问同步代码块中的资源。当线程1休眠结束后,线程2将继续执行。