假设我打开了许多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++;
}


我对此有一些疑问:


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

最佳答案

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


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


java是否会自动管理可能
同时从多个线程调用?


假设每个线程都有自己的“ in”实例(以及任何其他基于套接字的资源),则没有太多要做的事情。

07-27 13:18
查看更多