作者darkk6 (Mr. Pan)
看板java
標題[問題] wait() notify() 使用時機
時間Fri Jun 29 01:27:28 2012
學期結束了版上就真的變冷清了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
推 LaPass:ClientInstance是什麼東西? 06/29 09:44
→ darkk6:ClientInstance 那個就是我上面自訂的 Thread class 06/29 10:38
推 LaPass:借看一下ClientInstance的code我覺得問題出在那邊 06/29 11:45
推 LaPass:乍看之下沒問題...... 06/29 11:54
推 LaPass:看來也沒問題..... 雖然Thread.sleep()用this.sleep()去寫 06/29 12:31
→ darkk6:現在就是當第一個 client 停駐的時候 server 不會收下一個 06/29 12:32
→ LaPass:但那個應該不會有影響..... 06/29 12:32
→ darkk6:我也是這麼認為Q_Q 可是... 06/29 12:37
推 LaPass:問一下,你的 synchronized 有用嗎?用在哪裡? 06/29 12:53
→ darkk6:原本用Wait 的時候要用到 , 現在改成 sleep 沒用到 06/29 13:06
※ 編輯: darkk6 來自: 140.116.39.75 (06/29 13:33)
→ dou0228:選 Netty 或 Apache Mina 來寫吧.. 06/29 14:19