java - Java 中是否有回调函数概念来执行异步 I/O,就像在 Javascript 中一样?

标签 java

我是一名 Javascript 前端开发人员,但需要编写一个简单的 Java 程序来编写文件并发送 Email 和 HTTP 请求。

这是我用来将日志写入磁盘文件的 Java 代码:

    @Override
public void log(String text) {
    Date date = new Date();
    DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    DateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");
    String logDateString = sdf.format(date);
    //System.out.println("logDateString: " + logDateString);
    BufferedWriter bwToUse = null;
    if(logDateString.compareTo(m_firstOpenDate) == 0) {
        // use old buffer writer
        bwToUse = this.m_bw;
    } else {
        // generate new buffer writer
        // update m_firstOpenDate
        m_firstOpenDate = logDateString;


        try {
            // close previous day log
            this.m_bw.close();
            this.m_fw = new FileWriter(m_path + logDateString + ".log", true);
            this.m_bw = new BufferedWriter(this.m_fw);
            bwToUse = this.m_bw;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    try {
        bwToUse.write(sdf1.format(date) + ": " + text + "\n");
        bwToUse.flush();


    } catch (IOException e) {
        e.printStackTrace();
    }
}

您可以忽略细节。

我真正的问题是,对于那些繁重的 IO 操作,例如:文件读取、发送电子邮件和发出 HTTP 请求(将数据发布到 Web Hook ),如何在 Java 中以非阻塞异步方式进行?我知道在 Javascript 中使用回调是标准的,但在 Java 中,你如何进行异步 http 请求?

谢谢!

最佳答案

Java 中最接近的概念是Future .

但是你应该知道 Java 有一个多线程并发模型,而不是单线程 JavaScript 的异步并发模型。如果您是这个概念的新手,那么您最好从 Tutorial 开始。 .

对于 IO 操作,您还应该考虑 non-blocking IO API .

关于java - Java 中是否有回调函数概念来执行异步 I/O,就像在 Javascript 中一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30542897/

相关文章:

java - Spring - 在 Main 中使用 @Component 注释类的正确方法

java - GWT:从 HTML 中查找 Java 源代码

java - 如何解密 SMIME 邮件 smime.7ps 文件 - java mail

java - 如何在WebLogic 8中使用线程池?

java - 如何对读取 Java 输入的类进行单元测试?

java - 通过复制构造函数复制对象是否会获得与原始对象相同的实例变量?

java - 返回相同的随机 int 3 次并重复

java - 删除 EditText 中的第二个点/逗号

java - 创建一个新对象并调用方法 spring 配置

java 查找 NY 和 UTC 之间的偏移量