為什麼要多線程進行socket開發

來源:互聯網
上載者:User

    線程是進程的一個執行單元,線程之間可以進行通訊,但是線程的執行是無序的。在java 的socket開發的時候,為什麼要用線程開發,我的理解是是這樣的。
    在伺服器端,用ServerSocket類的ServerSocket.accept()函數,會產生一個阻塞,知道接收到用戶端的一個串連為止,這裡是不需要進行線程的。
    但是在後面的線程之間的讀寫過程,因為Server端要不斷監控cllient端來的資料,即是Socket.getInputStream,這是一個迴圈過程,一般用while(true)來解決,用接收到某一個特定條件的字串來結束,這個時候如果不用線程的話,因為server端的執行是按照順序執行的,所以其他client的串連只能進行等待。正是因為這個原因,在處理的時候必須要阻塞,所以需要用線程來進行處理,client端也是一個道理。
     需要特別注意的是,在socket.getInputStream和socket.getOutputStream的時候不會產生阻塞,但是如果BufferReader br = new BufferReader( new InputStreamReader( socket.getInputStream)); br.readLine()的時候會產生阻塞,這個阻塞在while迴圈裡面停住,一直等到socket的另一端有資料傳過來。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.