每间隔一秒向文件输出一条语句,输出当前时间到秒,独立线程 java代码
时间: 2024-10-18 15:15:05 浏览: 21
在Java中,我们可以创建一个单独的线程来每隔一秒向文件写入当前时间到秒的信息。下面是一个简单示例,使用`ScheduledExecutorService`配合`Runnable`实现:
```java
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TimeToFileWriter {
private static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) {
writeTimeToLogFile();
// 使用shutdown()方法关闭线程池,但不会立即停止任务,等待当前任务完成后会终止
executor.shutdown();
}
private static void writeTimeToLogFile() {
executor.scheduleAtFixedRate(() -> {
try {
String currentTime = getCurrentTimestamp();
FileWriter writer = new FileWriter("time_log.txt", true);
writer.write(currentTime + "\n");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static String getCurrentTimestamp() {
LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return formatter.format(now);
}
}
```
在这个程序中,我们首先创建了一个单线程的`ScheduledExecutorService`,然后定义了一个任务`writeTimeToLogFile`,它会被定时调度每秒执行一次。每次任务执行,都会获取当前的时间戳,然后将其追加到名为`time_log.txt`的文件中。
注意,`scheduleAtFixedRate`方法的第一个参数是任务执行的初始延迟,第二个是周期,第三个是单位,第四个是线程调度策略(在这里是固定的周期)。如果你希望任务在主线程结束后停止,可以考虑在`main`方法结束时调用`executor.shutdown()`。
阅读全文