看板 java 關於我們 聯絡資訊
假設我的code是這樣: public ThreadPractice() { listen(); } private void listen() { Thread t = new Thread() { public void run() { while(true) { //傾聽各種請求 事實上這裡是DatagramPacket的receive()方法, 因為會不斷的receive, 所以希望可以將整個while(ture) 都"同步化", 一次只處理一個receive的請求, e.g. 在 判斷封包的表頭後, 在做些處理. } } }; t.start(); } 請問我該如何保證, while(true)這個區塊的同步? 我試過 private synchronized void listen() 可是好像沒有... 是我理解錯誤了嗎? -- 重要的是"心" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.64.129.167
Puser:sync 或是 thread 只有一組 沒辦法看到效果吧? 04/17 09:20
我的問題是不知道該如何正確的"同步化"那個while(true)區塊, 因為將synchronized 加在private synchronized void listen()這, 好像也感覺不出效果@@ ※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:31)
sbrhsieh:如果只有一個 thread 建構 ThreadPractice object 04/17 16:43
sbrhsieh:就沒有什麼好談的。如果你有多個 Thread 各建構一個, 04/17 16:45
sbrhsieh:那你要說明這些 thread 之間要怎麼合作。 04/17 16:47
sbrhsieh:「希望可以將整個while(ture)都"同步化"」很含糊的說法 04/17 16:48
Puser:...;receive();parseMsg();... 依序寫下來 我是覺得不用同步 04/17 16:51
可能我講的太模糊了, 其實這是個client-server的架構, server端必須無窮的接受 client的請求, 所以我才希望 一次只能有一個client 存取while(true){}這個區塊. ※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:59)
sbrhsieh:只有一個 thread 跑這個 while loop 本來就是一次處理 04/17 17:14
sbrhsieh:處理一個 client 的請求,所有 client 送來的封包列隊 04/17 17:16
sbrhsieh:等待被處理。 04/17 17:17
calais007:一個Thread只能處理一個Block I/O 04/17 20:37
calais007:若想用一個Thead處理多個I/O ..關鍵字java nio 04/17 20:39