假设我打开了许多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”实例(以及任何其他基于套接字的资源),则没有太多要做的事情。