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

Nic*_*.Xu 5 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以忽略细节.

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

谢谢!

Ser*_*nin 5

Java中最接近的概念是Future.

但是您应该知道Java具有多线程并发模型,而不是具有异步并发模型的单线程JavaScript.如果您对这个概念不熟悉,那么最好从教程开始.

此外,对于IO操作,您应该考虑非阻塞IO API.