[問題] Thread的同步

看板java作者 (Lucifer)時間15年前 (2009/04/16 17:34), 編輯推噓5(506)
留言11則, 3人參與, 最新討論串1/1
假設我的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

04/17 09:20, , 1F
sync 或是 thread 只有一組 沒辦法看到效果吧?
04/17 09:20, 1F
我的問題是不知道該如何正確的"同步化"那個while(true)區塊, 因為將synchronized 加在private synchronized void listen()這, 好像也感覺不出效果@@ ※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:31)

04/17 16:43, , 2F
如果只有一個 thread 建構 ThreadPractice object
04/17 16:43, 2F

04/17 16:45, , 3F
就沒有什麼好談的。如果你有多個 Thread 各建構一個,
04/17 16:45, 3F

04/17 16:47, , 4F
那你要說明這些 thread 之間要怎麼合作。
04/17 16:47, 4F

04/17 16:48, , 5F
「希望可以將整個while(ture)都"同步化"」很含糊的說法
04/17 16:48, 5F

04/17 16:51, , 6F
...;receive();parseMsg();... 依序寫下來 我是覺得不用同步
04/17 16:51, 6F
可能我講的太模糊了, 其實這是個client-server的架構, server端必須無窮的接受 client的請求, 所以我才希望 一次只能有一個client 存取while(true){}這個區塊. ※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:59)

04/17 17:14, , 7F
只有一個 thread 跑這個 while loop 本來就是一次處理
04/17 17:14, 7F

04/17 17:16, , 8F
處理一個 client 的請求,所有 client 送來的封包列隊
04/17 17:16, 8F

04/17 17:17, , 9F
等待被處理。
04/17 17:17, 9F

04/17 20:37, , 10F
一個Thread只能處理一個Block I/O
04/17 20:37, 10F

04/17 20:39, , 11F
若想用一個Thead處理多個I/O ..關鍵字java nio
04/17 20:39, 11F
文章代碼(AID): #19vlkWl3 (java)