java 板


LINE

※ 引述《darkk6 (Mr. Pan)》之铭言: : 学期结束了版上就真的变冷清了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 进不来 如果你只是要测试..不需要找额外的 Package. 两个观念弄懂就好了. 1. 针对同一个 Object 作 Wait. 2. 处理 Client connection 时需要在另一个 Thread 中处理 写个 Pesudo Code. // Server ServerSocket sK = new ServerSocket(xxxx); final Object waitFlag = new Object(); Socket clientConnection = nul; while(clientConnection = sk.accept()) { final Socket client = clientConnection; new Thread(new Runable() { public void run() { String input = readline(client.getInputStream()); if (input.equals("Stop")) { waitFlag.wait(); } else { waitFlag.notify(); } } }.start(); } 如果你还要考虑到 Thread 效能.. 得用到 Pool 机制..那还是找套件吧.. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.104.157.183
1F:推 darkk6:恩恩,这个问题我已经确定应该是浏览器的问题了~ 谢罗~ 07/03 23:22
是的 我写了个小测试..证明是 Chrome/Firefox 没有发出新的连线需求. 方法如下: 先用 浏览器建立连线, 通常第二个或着第三个连线并没有被建立.. 接着用 telnet (Ex: 透过 KKMAN) 连线到 Server, Server 还是有建立新的连线. 我猜. 浏览器 可能有些侦错/暂存机制...并免重复建立连线之类的. 如果你要用 Http Protocol, 还是建议你找 Apache HttpClient 之类的 来帮你处理 Http Header, 写起来会简洁一些. 最後, 我看了你前一篇的文章, 关於 Notify/Wait 部分. 有个建议. synchronized(this) {wait();} 绑定的对象 是 Client Handler Object 本身.. 所以如果有十个 client handler object. 这十个 Thread 个别绑定在 十个 object 上. 要 Notify 就不容易了.. 先建一个 Object 当作 等待的对象. 比较容易解决. 也就是我上面的例子中的 waitFlag. ※ 编辑: byend 来自: 76.104.157.183 (07/04 16:13)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP