在我的应用程序中,我将记录一些特殊行以指示某些状态更改,例如
logger.info("Read file abc.txt completed from upstream system");
logger.info("The content of file abc.txt is valid");
logger.info("The content of abc.txt has been saved to db");
然后我监视日志文件,当找到上面的任何一行时,我为它们创建了一个“Event”实例:
class NewFileEvent() {}
class ValidationEvent() {}
class PersistEvent() {}
while(true) {
String nextLine = readNextLineFromLog();
if("Read file abc.txt completed from upstream system".equals(nextLine)) {
return new NewFileEvent();
} else if("The content of file abc.txt is valid".equals(nextLine)) {
return new ValidationEvent();
} else if("The content of abc.txt has been saved to db".equals(nextLine)) {
return new PersistEvent();
}
}
但是当我的朋友审查我的代码时,他说我不应该把它称为“事件”,因为它不是“异步”。当他看到名字event
时,他希望它来自另一个线程,但在我的代码中,我只是逐个解析它。
我现在很困惑。当我们在编程中说event
时,我们是否认为它是“异步的”?那么没有“同步”事件?
答案 0 :(得分:1)
我认为名字还可以。例如,Log4j具有LoggingEvent类。考虑使用枚举
也是有意义的enum LoggingEvent {
NewFile,
...
}
答案 1 :(得分:1)
事件只是一个对象。问题是,如果发送/接收/处理事件是同步还是异步。或者换句话说:用于发送事件的方法,阻止,直到事件被处理,还是立即返回?并且,如果已经“发送”了两个事件,它们是并行处理还是顺序处理?
在Java中,事件通常由事件侦听器处理,因此您在某处注册一个事件侦听器,该侦听器充当一个事件发生后立即得到通知的回调。这通常不是异步的,因此事件在同一个线程中一个接一个地传递给所有侦听器。在这种情况下,不建议使用多线程。它通常没有任何优势,使一切变得更加复杂和容易出错。
另见http://docs.oracle.com/javase/tutorial/uiswing/events/index.html
因此名称'event'本身不会自动表示'异步'。
答案 2 :(得分:1)
Hibernate使用相同的方法。当用户想要执行某些操作然后立即传递给事件侦听器时,会创建事件对象。有用 同步,因此事件对象仅用于传输一些数据。