簡體   English   中英

是否可以使阻塞 java 套接字讀取非活動等待?

[英]Is it possible to make blocking java socket read non active waiting?

我有一個應用程序需要打開數千個套接字連接並等待消息。 客戶端正在使用 java 阻塞套接字讀取。 這意味着我將只能有 N 個並發打開的連接(基於線程集的執行程序數),因為所有 N 個線程都將在活動等待時被阻塞(RUNNABLE 狀態)

有沒有辦法讓這些套接字讀取以在數據可用時“喚醒”線程(以與 NIO 套接字相同的方式)?

即當前行為線程池(4個線程)

  • socketRead0(..) - 可運行
  • socketRead0(..) - 可運行
  • socketRead0(..) - 可運行
  • socketRead0(..) - 可運行

沒有更多的線程可以執行

期望行為線程池(4 個線程)

  • socketRead0(..) - 等待(停車)
  • socketRead0(..) - 等待(停車)
  • socketRead0(..) - 等待(停車)
  • socketRead0(..) - 等待(停車)
  • socketRead0(..) - RUNNABLE(它正在執行讀取並將返回數據)

這樣,另一個線程可以在其他線程等待時啟動並執行數據可用的套接字讀取

注意:我知道這可以通過 NIO 實現,但想知道如何將這種行為轉移到舊版同步調用(如果可能)謝謝

答案是不。 java.net.SocketInputStream 的所有方法都是阻塞的。 InputStream.available() 沒有實現並且總是返回 0。沒有 NIO,唯一的方法是每個套接字使用一個線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM