如何在 Java 中延迟几秒钟的时间

Mohammad Irfan 2023年1月30日 2020年10月15日
  1. 在 Java 中使用 Thread.sleep() 方法制造延迟
  2. 在 Java 中使用 TimeUnit.sleep() 方法进行延迟
  3. 在 Java 中使用 ScheduledExecutorService 进行延迟
  4. 在 Java 中使用 ScheduledExecutorService 进行延迟
如何在 Java 中延迟几秒钟的时间

本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

制造延时有几种方法,比如 TimeUnit.sleep()ScheduleAtFixedRate()Thread.sleep() 等方法。我们来看看例子。

在 Java 中使用 Thread.sleep() 方法制造延迟

Thread 是一个 Java 类,用于创建和并发执行任务,并提供了一个 sleep() 方法来暂停当前执行一段时间。

public class SimpleTesting {
	public static void main(String[] args) {
		try {
			for (int i = 0; i < 2; i++) {
				Thread.sleep(1000);
				System.out.println("Sleep "+i);
			}
		}catch(Exception e) {
			System.out.println(e);
		}
	}
}

输出:

Sleep 0
Sleep 1

在 Java 中使用 TimeUnit.sleep() 方法进行延迟

在这个例子中,我们使用了 TimeUnit 类的 sleep() 方法,用来对指定的时间进行执行延迟。TimeUnit 类属于 Java 中的一个并发 API 包。

import java.util.concurrent.TimeUnit;

public class SimpleTesting {
	public static void main(String[] args) {

		try {
			for (int i = 0; i < 2; i++) {
				TimeUnit.SECONDS.sleep(2);
				System.out.println("Sleep "+i);
			}
		}catch(Exception e) {
			System.out.println(e);
		}
	}
}

输出:

Sleep 0
Sleep 1

在 Java 中使用 ScheduledExecutorService 进行延迟

Java 提供了一个类 ScheduledExecutorService 来调度并发环境下的执行。我们可以使用它里面的 run() 方法来执行单独的执行路径。请看下面的例子。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Main
{	
	public static void main(String args[]) 
	{
		try {
			final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
			executorService.scheduleAtFixedRate(new Runnable() {
				@Override
				public void run() {
					executeTask();
				}
			}, 0, 1, TimeUnit.SECONDS);
		}catch(Exception e) {
			System.out.println(e);
		}
	}
	private static void executeTask() {
		System.out.println("Task Executing... ");
	}
}

输出:

Task Executing... 
Task Executing... 
Task Executing... 

在 Java 中使用 ScheduledExecutorService 进行延迟

如果你使用的是 Java 9 或更高版本,你可以使用方法引用的概念,在 scheduleAtFixedRate() 方法内部调用方法。请看下面的例子。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SimpleTesting {
	public static void main(String[] args) {

		try {
			final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
		    executorService.scheduleAtFixedRate(SimpleTesting::executeTask, 1, 2, TimeUnit.SECONDS);
		}catch(Exception e) {
			System.out.println(e);
		}
	}
	private static void executeTask() {
	    System.out.println("Task Executing... ");
	}
}

输出:

Task Executing... 
Task Executing... 
Task Executing...