[問題] wait() notify() 使用時機

看板java作者 (Mr. Pan)時間13年前 (2012/06/29 01:27), 編輯推噓6(607)
留言13則, 3人參與, 最新討論串1/5 (看更多)
學期結束了版上就真的變冷清了XD === synchronized 問題大概是我學 java 到現在每次要用 都要重看的部分 XD 基本的 Producer 與 Consumer這個我是能夠理解,要怎麼使用 我現在想做一個系統,直覺上好像能用 wait notify 來解決 我想問的是: 假設我現在有一個 ServerSocket 接受來自 N 個 client 的連線 ( socket=serverSocket.accept() 的 socket assign 給一個 thread 的 class) 每個 Client 連入的時候,都會傳個指令給 Server 如果 Client 的指令是 A ,就 hold 住這個 client 的 thread 如果有任何一個 Client 的指令是 B , 就讓所有 hold 住的 class 繼續往下跑 很直覺的用 wait() notify() 來做... 但試不出來 目前問題似乎已經不是「能不能做到」而是為什麼會卡住了XD (底下補充) 想請問對這部分比較熟的板大們, wait() notify() 可以這樣做嗎? (發現問題似乎不在這邊,而是 connect 的問題,所以 wait-notify 應該做得到吧?) ========== 補充 ============ 發現似乎是根本沒接受下一個 client 連線 , 一部分的 Code : ServerSocket svr=new ServerSocket(port); Socket skt; System.out.println("Server Start listening, port : "+port); while(true){ skt=svr.accept(); ClientInstance client=new ClientInstance(skt); client.start(); System.out.println("Server Connected : "+client); } 程式執行到 client.start() 後,確實是有跑出 Server Connected 不過如果我在 ClientInstance 裡面的 run() 有停頓動作(如 wait , sleep) 那麼下一個 連線無法連入。 Client 端是瀏覽器 , 這個程式是想要用 Socket 模擬 httpServer. 必須是 Multi-Thread 或者有沒有推薦現成的套件呢 0.0 ? (SE 為主啦XD) ((還是說要做一個 http server 沒那麼簡單... ==== LaPass 大提供的 demo 之前我有找到過試過 也是一樣在第一個進來的 client 還沒 response 之前 第二個 Client 進不來 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.162.164

06/29 09:44, , 1F
ClientInstance是什麼東西?
06/29 09:44, 1F

06/29 09:59, , 2F
http://ppt.cc/I9fd 還真的有httpServer
06/29 09:59, 2F

06/29 10:38, , 3F
ClientInstance 那個就是我上面自訂的 Thread class
06/29 10:38, 3F

06/29 11:45, , 4F
借看一下ClientInstance的code我覺得問題出在那邊
06/29 11:45, 4F

06/29 11:54, , 5F
乍看之下沒問題......
06/29 11:54, 5F

06/29 12:22, , 6F
http://pastie.org/4169494 原本是 wait notify 先改 sleep
06/29 12:22, 6F

06/29 12:31, , 7F
看來也沒問題..... 雖然Thread.sleep()用this.sleep()去寫
06/29 12:31, 7F

06/29 12:32, , 8F
現在就是當第一個 client 停駐的時候 server 不會收下一個
06/29 12:32, 8F

06/29 12:32, , 9F
但那個應該不會有影響.....
06/29 12:32, 9F

06/29 12:37, , 10F
我也是這麼認為Q_Q 可是...
06/29 12:37, 10F

06/29 12:53, , 11F
問一下,你的 synchronized 有用嗎?用在哪裡?
06/29 12:53, 11F

06/29 13:06, , 12F
原本用Wait 的時候要用到 , 現在改成 sleep 沒用到
06/29 13:06, 12F
※ 編輯: darkk6 來自: 140.116.39.75 (06/29 13:33)

06/29 14:19, , 13F
選 Netty 或 Apache Mina 來寫吧..
06/29 14:19, 13F
文章代碼(AID): #1Fx9G3PQ (java)
討論串 (同標題文章)
文章代碼(AID): #1Fx9G3PQ (java)