【发布时间】:2015-04-21 13:15:08
【问题描述】:
我想为我正在开发的一个小型 Java 实用程序创建自己的基本控制台日志。一切都基本实时运行良好;但是,有一小段代码困扰着我。我将简要介绍以下所有代码。
注意:这里的几乎所有代码都未经测试/未经优化。如果我做错了什么,请告诉我,我很愿意接受批评。
用于记录目的的静态变量:
static ArrayList<String> logs = new ArrayList<>();
static int offset = 0;
static DateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
static Date date = new Date();
填充JTextArea 的代码 - 这会附加日志消息并记住偏移量(因此我不会遍历整个 ArrayList 以获取已记录的内容)。
public static void populateTextArea(final JTextArea textArea) {
for(int i = offset; i < logs.size()-1; i++) {
textArea.append(dateFormat.format(date) + ": " + logs.get(i)+"\n");
}
offset = logs.size()-1;
}
以下内容每 150 毫秒自动更新一次控制台:
public static void timerLogging(final JTextArea textArea) {
Timer timer = new Timer(150, new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
updateDateAndTime();
populateTextArea(textArea);
}
});
timer.start();
}
现在困扰我的是以下部分:
public static void updateDateAndTime() {
date = new Date();
}
有没有办法简单地做一些事情,比如date = GlobalDate.getCurrentDate();?以目前的设置方式,它会不会产生很小的开销(可能甚至不明显,但我不是那种“让它工作”的人)?
【问题讨论】:
-
请记住,如果您花时间担心小额开销,那么您花在真正重要的事情上的时间就会少得多。
-
请注意,如果您更改该
Date实例的值,那么您将为引用同一实例的“每个人”更改它。 -
好点卡亚曼。 @Tom - 它仅用于控制台,在这种情况下我认为它确实是安全的。
-
作为旁注 - 您似乎正在使用全局 SimpleDateFormat 实例和 TimerTask。如果您碰巧在代码中使用了多个 TimerTask,请记住 SimpleDateFormat 不是线程安全的(您现在拥有的代码不是问题,但如果您使用多个 TimerTask 可能会出现问题)
-
@KresimirNesek 你能详细说明一下吗?我对你想说的话有一个简单的理解,但我没有完全理解。
标签: java