用java编写三个线程:各线程分别显示各自的运行时间,第一个线程每隔1秒钟运行一次,第二个线程每隔5秒运行一次,第三个线程每隔10秒运行一次
时间: 2024-12-19 15:13:27 浏览: 19
在Java中,我们可以使用`ScheduledExecutorService`来编写这样的程序,它允许我们按照特定的时间间隔调度任务。以下是创建这三种线程的示例代码:
首先导入必要的包:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
```
然后定义一个简单的计时器类,用于记录并打印线程的运行时间:
```java
class TimerTask implements Runnable {
private final String name;
private long startTime;
public TimerTask(String name) {
this.name = name;
}
@Override
public void run() {
long elapsedTime = System.currentTimeMillis() - startTime;
System.out.printf("%s has been running for %d seconds\n", name, elapsedTime / 1000);
}
}
```
接着,使用`ScheduledExecutorService`创建线程:
```java
public class Main {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
// 第一个线程每秒执行一次
ScheduledFuture<?> task1 = executor.scheduleAtFixedRate(new TimerTask("Thread 1"), 0, 1, TimeUnit.SECONDS);
// 第二个线程每5秒执行一次
ScheduledFuture<?> task2 = executor.scheduleAtFixedRate(new TimerTask("Thread 2"), 0, 5, TimeUnit.SECONDS);
// 第三个线程每10秒执行一次
ScheduledFuture<?> task3 = executor.scheduleAtFixedRate(new TimerTask("Thread 3"), 0, 10, TimeUnit.SECONDS);
// 执行完所有任务后关闭executor
executor.shutdown();
// 等待所有任务完成
try {
task1.get(); // 获取task1的结果,实际上不需要,因为task已经结束
task2.get();
task3.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,`scheduleAtFixedRate()`方法会按照指定的时间间隔和单位持续执行任务,直到`ScheduledExecutorService`关闭。
阅读全文