在.Net中,如果我想异步上传文件,我只需要调用System.Net.WebClient类的UploadFileAsync()实例方法,阻塞主线程,直到它收到来自我传递到的waithandle的信号。 UploadFileAsync()方法,然后在上传文件后调用的事件处理程序过程中,使用相同的waithandle发出主线程信号。以这种方式上传文件的好处是,它还可以订阅每次文件上传进度发生变化时调用的事件处理程序。
在Java中,是否有使用java.net.URLConnection类(或类似的东西)实现类似功能的直接方法?
答案 0 :(得分:1)
是的,使用ExecutorService
并提交Callable
对象,然后等到future.get()
返回结果。例如:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Foo> future = executor.submit(new Callable<Foo>()
{
@Override
public Foo call() throws Exception
{
// ...
return someFoo;
}
});
Foo result = future.get(); // result is the same as someFoo, both should refer to the same object
再次注意future.get()
阻塞,直到后台线程完成执行call()
。
答案 1 :(得分:0)
优秀的Apache Http Client似乎有an async version。我自己没有用过,但看起来很有希望。
Jersey client还内置了可满足您需求的异步请求支持。它有一个test class来证明它的用途。
Jersey客户端至少提供了请求完成的回调,但我不确定文件上传的进度回调。