※ 引述《YRED (~~~)》之銘言:
: 整個一對一聊天原始碼~
: http://www.javaworld.com.tw/jute/post/view?bid=35&id=34182&sty=1&tpg=1&age=0
: 這個我compiler過了~也確定可執行
: 每次client或server端丟訊息時~(接enter鍵)
: 我剛說的while迴圈就會再跑一次~這樣才會看到對方丟的訊息
: 歹勢~我是新手~
: 整個程式碼~都看過了~
: 還是不知道為何會這樣~
: 然後~我看head first java那本~
: 也是這樣寫~
老實說,你敘述的不是很清楚
我看了很多遍,才真正了解你的意思
其實不管是 readLine() 或著是其他的 read 方法都一樣
要遭遇到 EOF (End Of File) 的時候,其回傳值才會是 null (這裡是以 readLine 為例)
但是呢,網路上的 Stream 在傳送方並沒有傳送資料時,
並不會傳送 EOF,TCP 的連線是一直 keep 住的。
而對於接收方,不管是不是網路的 stream,read 是一種 synchronized IO
簡單的說,在目前這個 thread 一定要完成 read 的動作之後,才能執行下一個指令
(有興趣的話請參考 Operating System)
所以說這支程式並不是離開迴圈、結束 thread,
只是在 readLine() 時進入了 block state,
等待有資料時,這個 thread 才又回到 running state 繼續執行。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.173.31
※ 編輯: tkcn 來自: 59.126.173.31 (08/20 21:00)
討論串 (同標題文章)