所以,我正在努力理解Java 8中引入的Stream API。我正在尝试创建一个可以在单独的线程上运行的流(仅供教育目的)。
String oracle = "http://www.oracle.com";
URL url = new URL(oracle);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
in.lines().parallel().forEach(System.out::println);
System.out.print("CLOSING THE INPUT STREAM!, shouldnt this crash?");
in.close();
结果不是我所预期的(当另一个线程正在读取输入流时,我关闭了它,所以我预计会导致崩溃)。请注意.parallel()
方法的调用。相反,代码似乎以顺序方式执行,没有任何问题。
<script language="JavaScript" src="http://www.oracleimg.com/us/assets/metrics/ora_ocom_hp.js"></script>
<!-- End SiteCatalyst code -->
<!-- SS_END_SNIPPET(fragment6,1)-->
<!-- SS_BEGIN_SNIPPET(fragment7,ui)--> <!-- SS_END_SNIPPET(fragment7,ui)-->
</html>
CLOSING THE INPUT STREAM!, shouldnt this crash?
有人知道发生了什么吗?为什么我的代码没有崩溃?
ForkJoinPool
。 - Maroun