📜  如何在java中等待时间(1)

📅  最后修改于: 2023-12-03 15:24:32.779000             🧑  作者: Mango

如何在Java中等待时间

在Java中,我们经常需要等待一段时间,例如等待某个任务完成、等待用户输入等。本文将介绍 Java 中等待时间的方法。

一、Thread.sleep(long millis)

这是 Java 中最简单的等待时间的方法,它会让当前线程睡眠指定的时间。具体使用方法如下:

// 等待 1 秒
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

代码中的 Thread.sleep(1000) 表示当前线程睡眠 1000 毫秒,也就是 1 秒。注意,该方法会抛出 InterruptedException 异常,需要进行捕获或抛出。

二、Object.wait(long timeout)

该方法是让一个线程等待其他线程通知某个事情发生。具体使用方法如下:

synchronized (obj) {
    try {
        // 等待 1 秒
        obj.wait(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

代码中的 synchronized (obj) 表示该代码块是同步块,obj.wait(1000) 表示当前线程让出锁并等待其他线程唤醒它,最多等待 1000 毫秒。注意,wait() 方法需要在同步块中调用,并且会抛出 InterruptedException 异常,需要进行捕获或抛出。

三、CountDownLatch

CountDownLatch 是 Java 中一个非常实用的工具类,它可以让一个线程等待其他多个线程完成任务后再执行它自己的任务。具体使用方法如下:

CountDownLatch latch = new CountDownLatch(n);
for (int i = 0; i < n; i++) {
    new Thread(() -> {
        // 每个线程完成自己的任务
        latch.countDown();
    }).start();
}
try {
    // 等待所有线程完成任务
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}

代码中 latch.countDown() 表示当前线程已经完成任务,latch.await() 表示当前线程等待所有线程完成任务后再执行。注意,CountDownLatch 的构造方法需要传入一个整数参数表示等待的线程数。

四、ScheduledExecutorService

ScheduledExecutorService 可以定时执行任务,例如每隔一段时间执行某个任务。具体使用方法如下:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 每隔 1 秒执行一次任务
executor.scheduleAtFixedRate(() -> {
    // 执行的任务
}, 0, 1, TimeUnit.SECONDS);

代码中 executor.scheduleAtFixedRate() 表示定时执行周期性任务,第二个参数 0 表示开始时间,第三个参数 1 表示间隔时间,第四个参数 TimeUnit.SECONDS 表示时间单位。

五、Thread.join(long millis)

Thread.join(long millis) 可以让当前线程等待其他线程执行完成后再继续执行。具体使用方法如下:

Thread thread = new Thread(() -> {
    // 其他线程任务
});
thread.start();
try {
    // 等待 1 秒
    thread.join(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

代码中 thread.join(1000) 表示等待 thread 线程执行完成,最多等待 1000 毫秒,如果还未执行完成则继续执行当前线程。注意,join() 方法需要在当前线程中调用,并且会抛出 InterruptedException 异常,需要进行捕获或抛出。

以上就是 Java 中等待时间的方法,具体使用时需要根据实际情况选择合适的方法。