Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在输入流中等待时执行某些操作_Java_Multithreading_Apache Httpclient 4.x_Pipelining - Fatal编程技术网

Java 在输入流中等待时执行某些操作

Java 在输入流中等待时执行某些操作,java,multithreading,apache-httpclient-4.x,pipelining,Java,Multithreading,Apache Httpclient 4.x,Pipelining,我正在将字节从inputstream传输到filechannel。由于处理器和文件io比网络快很多倍,所以很明显,线程在传输数据时会暂停很多时间。是否可以实现下载文件的流水线概念,以便在每次暂停之间线程处理下一个get请求,从而使单个线程处理多个get请求?以下是我的简单实现: while (start < end && currentState.get() == 1) { delta = fileChannel.transferFrom(inputChanne

我正在将字节从inputstream传输到filechannel。由于处理器和文件io比网络快很多倍,所以很明显,线程在传输数据时会暂停很多时间。是否可以实现下载文件的流水线概念,以便在每次暂停之间线程处理下一个get请求,从而使单个线程处理多个get请求?以下是我的简单实现:

while (start < end && currentState.get() == 1) {
      delta = fileChannel.transferFrom(inputChannel, start, 8192);
      start += delta;
      }
while(start

欢迎任何其他提高速度的想法。

有两种方法:

  • 将代码完全重写为面向事件的范例(最好的方法是使用Netty)

  • 利用Java对多线程的出色支持。在这种情况下,您可以保留大部分阻塞I/O代码


  • 你需要看看。异步IO已经有了一些技术。您是否意识到,如果您同时下载两个文件,它们的下载速度可能会减半?使用Future,在您还在等待价值的同时执行有用的任务。