簡體   English   中英

服務器訪問兩種不同類型的線程

[英]Server accessing two different type of threads

我有一台msgs服務器,具有2種不同類型的線程,一個從客戶端讀取,另一個在另一個客戶端中寫入(取決於接收方)...(是的,必須那樣,我不能在同一線程中讀/寫...)

我基本上需要將所有msg存儲在ArrayList(Server ?)中的某個地方,直到其他客戶端連接到服務器之前,一直保持它們。

我的問題是:

我可以輕松地從線程中讀取對象,但是我看不到任何方法可以將對象提取到共享的ArrayList中,以便在另一個線程中訪問他。

--->Input Thread ---> ArrayList ---> OutputThread   

聽起來您真正需要的是線程安全隊列,而不一定是ArrayList。 BlockingQueue接口專門用於這種事情。 您的輸入線程可以將消息放入隊列,而輸出線程可以刪除它們。 如果在輸出線程嘗試從中獲取消息時隊列為空,它將自動等待輸入線程添加消息。

有許多類可以實現BlockingQueue接口,但是您可能要使用以下兩種之一:

  • ArrayBlockingQueue基於固定大小的數組,因此在構造一個數組時必須選擇一個大小,這是隊列中可以容納多少個項目的限制。 如果在輸入線程嘗試將消息放入隊列時隊列已滿,則輸入線程將等待輸出線程刪除隊列中已有的消息之一。
  • LinkedBlockingQueue不需要大小限制。 您可以擁有一個永遠不會“滿”的隊列,因此即使輸出線程沒有足夠快地除去它們以保持連接,輸入線程也可以將越來越多的消息放入其中。 (排隊太多消息最終可能導致OutOfMemoryError。)

暫無
暫無

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

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