[問題] NIO 多執行緒寫入時的做法

看板java作者 (光波記憶)時間13年前 (2012/10/23 22:22), 編輯推噓4(404)
留言8則, 3人參與, 最新討論串1/1
小弟是最近才開始接觸到 NIO 有NIO寫入的問題想請教大家 一般在書上或是網路上看到的例子大多是 while(...) { //selector 輪詢 .... if ( key.isAcceptable() ) { //接收連線 .... } if ( key.isWritable() ) { //寫入 SocketChannel client = (SocketChannel) key.channel(); ..... client.write(buffer); } } 只是目前遇到的問題是 小弟有另一個 Thread 定時會去讀取資料庫 然後再寫到某幾個 Socket 中 (不一定是全部) 想請問一下如何在其他 Thread 寫資料到 SocketChannel 因為沒看到例子因此寫的很猶豫 如果網路上有例子的話也希望能夠分享一下 謝謝 我自己想到的方式有兩個,但不知合不合法 : 1. 共用寫入的 buffer ,用 synchonized 處理存取問題 2. 不寫 key.isWritable 那段, 把SocketChannel 或 socket 存進 list 中直接使用 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.64.2.128

10/24 01:16, , 1F
我沒摸過NIO說.... 不過之前寫過多人連線的東西
10/24 01:16, 1F

10/24 08:58, , 2F
這些都可以用mvc(trigger/listener)去實作
10/24 08:58, 2F

10/24 11:27, , 3F
就是想知道在其他 Thread 寫資料到 NIO 的 Socket 的方法
10/24 11:27, 3F

10/24 13:48, , 4F
如果是一般socket,直接寫進去就好了,NIO不清楚.....
10/24 13:48, 4F

10/24 23:57, , 5F
我也只會用一般 Socket 的做法~唉~
10/24 23:57, 5F

10/25 09:25, , 6F
先寫一個統一處理作業的中心的類別-我會採用facade樣式
10/25 09:25, 6F

10/25 16:41, , 7F
感謝樓上的回答,但我看了一下facade,不是很確定它怎麼用在
10/25 16:41, 7F

10/25 16:43, , 8F
多執行緒 我感覺比較像是callback和listener的機制~
10/25 16:43, 8F
文章代碼(AID): #1GXgWeAY (java)