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

时间:2015-05-30 06:04:17

标签: java

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

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

int count = 0;
unsigned int tmp_bitmap = x;        
while (tmp_bitmap > 0) {
    int next_psn = __builtin_ffs(tmp_bitmap) - 1;
    tmp_bitmap &= (tmp_bitmap-1);
    id[count++] = next_psn;
}

您可以忽略细节。

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

谢谢!

3 个答案:

答案 0 :(得分:5)

Java中最接近的概念是Future

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

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

答案 1 :(得分:1)

您可以使用FutureTask。您应该实现Callable接口。这是sample

答案 2 :(得分:0)

你应该使用新的线程,这不会阻止主线程
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
线程意味着你可以一次做多件事(简单地告诉)
您可以按如下方式调用该函数:

1. Setup easy install (windows - simplified)
    a. download ez.setup.py (https://bootstrap.pypa.io/ez_setup.py) from 'https://pypi.python.org/pypi/setuptools'
    b. move ez.setup.py to C:\Python27\
    c. open cmd prompt
    d. cd C:\Python27\
    e. C:\Python27\python.exe ez.setup.py install

但是确保线程运行时SOME_TEXT不会改变 并确保日志在某个时间结束,如果不是,您可以多次登录,并且会有许多线程可能会造成麻烦。
要了解更多相关信息,请使用@SergeyPetunin的答案。