假设我打开了许多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
行。它会阻塞所有线程(如果没有,为什么?)in.readLine()
吗?答案 0 :(得分:1)
如果数据不可用,则单个线程在“while”行停止。 它会阻塞所有线程(如果没有,为什么?)
当然不是 - (主要),线程用于提供良好的I / O性能。底层操作系统从请求不立即可用的输入的线程中删除执行,并使该执行可用于可以推进进度的其他线程。
java是否会自动管理可能的许多in.readLine() 从许多线程同时调用?
假设每个线程都有自己的'in'实例(以及任何其他每个套接字资源),那么没有太多的工作要做。