作者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
1F:推 LaPass:ClientInstance是什麽东西? 06/29 09:44
3F:→ darkk6:ClientInstance 那个就是我上面自订的 Thread class 06/29 10:38
4F:推 LaPass:借看一下ClientInstance的code我觉得问题出在那边 06/29 11:45
5F:推 LaPass:乍看之下没问题...... 06/29 11:54
7F:推 LaPass:看来也没问题..... 虽然Thread.sleep()用this.sleep()去写 06/29 12:31
8F:→ darkk6:现在就是当第一个 client 停驻的时候 server 不会收下一个 06/29 12:32
9F:→ LaPass:但那个应该不会有影响..... 06/29 12:32
10F:→ darkk6:我也是这麽认为Q_Q 可是... 06/29 12:37
11F:推 LaPass:问一下,你的 synchronized 有用吗?用在哪里? 06/29 12:53
12F:→ darkk6:原本用Wait 的时候要用到 , 现在改成 sleep 没用到 06/29 13:06
※ 编辑: darkk6 来自: 140.116.39.75 (06/29 13:33)
13F:→ dou0228:选 Netty 或 Apache Mina 来写吧.. 06/29 14:19