第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 BufferedReaderlines() 方法(一個流)永遠不會結(jié)束?

為什么 BufferedReaderlines() 方法(一個流)永遠不會結(jié)束?

白衣染霜花 2023-06-28 16:19:28
從 BufferedReader 獲取數(shù)據(jù)的流似乎是異步調(diào)用消費者,這是一個很棒的功能。為什么是這樣?看來 JVM 有一個線程在后臺調(diào)用lines().forEach()方法。   public class P {       public static void main(String[] args) throws InterruptedException {           while (true) {               Thread.sleep(1000);               java.lang.System.out.println("Running");           }       }   }   class StreamQuestion {       public static void main(String[] args) throws java.io.IOException {           ProcessBuilder pb = new ProcessBuilder().command("java", "P");           pb.environment().put("CLASSPATH", P.class.getProtectionDomain().getCodeSource().getLocation().getPath());           java.lang.Process p = pb.start();           /**            * Question: Why does this program not end? Instead, it keeps printing "Running".            * */           new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream())).lines().forEach(java.lang.System.out::println);       }   }
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經(jīng)驗 獲得超10個贊

問題不清楚,似乎陳述了不真實的事實。

流永無止境

當(dāng)進程終止并且所有輸出都已被讀取時,流將結(jié)束。既然那永遠不會發(fā)生,你是對的,流永遠不會結(jié)束。

為什么這個程序沒有結(jié)束?相反,它會繼續(xù)打印“正在運行”。

因為該過程永遠不會結(jié)束,并且會永遠循環(huán)地打印“Running” while (true) {...}。這就是你編寫代碼要做的事情,所以這就是它的作用。為什么程序完全按照您的指示執(zhí)行操作,這讓您感到困惑?

異步調(diào)用消費者

不,這是同步完成的,除非你使它并行。

JVM有一個線程在后臺調(diào)用lines().forEach()方法

不,這是在主線程中完成的,除非您將其設(shè)為并行,但您沒有這樣做。


查看完整回答
反對 回復(fù) 2023-06-28
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號