从多个远程资源中读取数据

时间:2014-05-31 17:38:16

标签: java multithreading networking

假设我打开了许多HttpURLConnection,并且我尝试使用许多线程从该远程资源下载数据。我实际上用这样的循环来做这件事,前提是一个线程一次只能有一个打开的连接。因为远程资源在发送数据时比我的连接慢,所以我必须使用许多线程在"同一时间下载更多资源":

BufferedReader in = new BufferedReader(
    new InputStreamReader(yc.getInputStream())); // può lanciare IOEXC
StringBuffer buffer = new StringBuffer();
while ((inputLine = in.readLine()) != null) { // bloccante
    buffer.append(inputLine).append('\n');
    cicliLettura++;
}

我对此有一些疑问:

  1. 如果数据不可用,则单个线程将停在while行。它会阻塞所有线程(如果没有,为什么?)
  2. java会自动管理可以从多个线程同时调用的许多in.readLine()吗?

1 个答案:

答案 0 :(得分:1)

  

如果数据不可用,则单个线程在“while”行停止。   它会阻塞所有线程(如果没有,为什么?)

当然不是 - (主要),线程用于提供良好的I / O性能。底层操作系统从请求不立即可用的输入的线程中删除执行,并使该执行可用于可以推进进度的其他线程。

  

java是否会自动管理可能的许多in.readLine()   从许多线程同时调用?

假设每个线程都有自己的'in'实例(以及任何其他每个套接字资源),那么没有太多的工作要做。

相关问题