面试题答案
一键面试- 简述实现思路:
- 使用Java单线程池,即
Executors.newSingleThreadExecutor()
创建一个单线程的线程池。这样所有的日志写入任务都会在这个唯一的线程中顺序执行,从而保证日志按顺序写入文件。 - 创建一个日志写入任务类,实现
Runnable
接口,在run
方法中编写具体的日志写入文件逻辑。 - 将日志写入任务提交到单线程池中执行。
- 使用Java单线程池,即
- 关键代码部分:
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class LogProcessor {
private static final String LOG_FILE = "app.log";
private static final ExecutorService executor = Executors.newSingleThreadExecutor();
public static void main(String[] args) {
// 模拟日志写入任务
String logMessage1 = "This is the first log message.";
String logMessage2 = "This is the second log message.";
writeLog(logMessage1);
writeLog(logMessage2);
// 关闭线程池
executor.shutdown();
}
private static void writeLog(String logMessage) {
executor.submit(() -> {
try (FileWriter writer = new FileWriter(LOG_FILE, true)) {
writer.write(logMessage + "\n");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
在上述代码中:
Executors.newSingleThreadExecutor()
创建了单线程池executor
。writeLog
方法接受一个日志消息字符串,在submit
方法中传入一个实现了Runnable
接口的匿名内部类,这个匿名内部类的run
方法(这里通过lambda表达式实现)中使用FileWriter
将日志消息写入文件,并追加换行符和刷新缓冲区。main
方法中模拟了两个日志写入任务,并在最后调用executor.shutdown()
关闭线程池。