永发信息网

如何关闭一个正在accept的ServerSocket

答案:2  悬赏:10  手机版
解决时间 2021-02-06 18:15
如何关闭一个正在accept的ServerSocket
最佳答案
加入一个ServerSocket正在另一个线程堵塞accept,那如何停止accept或者关闭Socket? Server socket 设置下超时 setSoTimeout 然后在Listen线程中用interrupt 其实直接close socket也可以,不过会抛出异常
全部回答
加入一个serversocket正在另一个线程堵塞accept,那如何停止accept或者关闭socket? server socket 设置下超时 setsotimeout 然后在listen线程中用interrupt 其实直接close socket也可以,不过会抛出异常,我的意思是有什么比较安全而又简单的办法?难道要加一个标志,然后要关闭的时候把标志设为stop,然后连接listernsocket?这样也未免太麻烦了 jdk5.0里面新增了java.util.concurrent包(对于多线程的开发建议尽量使用这个包),下面是javadoc里面的样例代码 用法示例 下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 executors.newfixedthreadpool(int) 工厂方法: java 代码 class networkservice implements runnable { private final serversocket serversocket; private final executorservice pool; public networkservice(int port, int poolsize) throws ioexception { serversocket = new serversocket(port); pool = executors.newfixedthreadpool(poolsize); } public void run() { // run the service try { for (;;) { pool.execute(new handler(serversocket.accept())); } } catch (ioexception ex) { pool.shutdown(); } } } class handler implements runnable { private final socket socket; handler(socket socket) { this.socket = socket; } public void run() { // read and service request on socket } } 下列方法分两个阶段关闭 executorservice。第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownnow(如有必要)取消所有遗留的任务: java 代码 void shutdownandawaittermination(executorservice pool) { pool.shutdown(); // disable new tasks from being submitted try { // wait a while for existing tasks to terminate if (!pool.awaittermination(60, timeunit.seconds)) { pool.shutdownnow(); // cancel currently executing tasks // wait a while for tasks to respond to being cancelled if (!pool.awaittermination(60, timeunit.seconds)) system.err.println("pool did not terminate"); } } catch (interruptedexception ie) { // (re-)cancel if current thread also interrupted pool.shutdownnow(); // preserve interrupt status thread.currentthread().interrupt(); } } 内存一致性效果:线程中向 executorservice 提交 runnable 或 callable 任务之前的操作 happen-before 由该任务所提取的所有操作,后者依次 happen-before 通过 future.get() 获取的结果。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
正旺销售服务店地址好找么,我有些事要过去
下列关于父母对子女的抚养义务的说法,错误的
英语翻译:他应该付多少钱,那完全由他决定。
一汽大众花湖展示厅地址在哪,我要去那里办事
合作气围是什么意思
没有启动资金怎么办
永川哪里有卖自行车的
楚越英伦4s店地址有知道的么?有点事想过去
如图甲、乙分别代表某种植物两不同个体细胞的
小赵大排档地址在什么地方,想过去办事
愿为军下剑,只为斩楼兰 的诗名是什么
难道带有4的楼层真的没人会买吗?是什么原因呢
比亚乔摩托(沙窝店)地址有知道的么?有点事想
户户通都放了几个月了,现在屏幕上现智能卡未
麻仓叶和安娜是怎么认识的?为什么又成为阿叶
推荐资讯
祁奚荐贤其仇也什么句式怎么理解
求《最强丧尸传说》无删节的txt全本精校版
牛羊肉怎么才能煮的又快软?
别人要贷款我是受委托人是什么意思意思
积累“受惊吓”的四字成语!快
翰林图文广告(泰安路与长春路交叉口旁)地址在
怎样把贴在门上的贴贴纸弄下来又不留痕?
属于脑室腹腔分流术常见并发症的是()
氟钛酸的用途
大连吉陆达汽车租赁有限公司在哪里啊,我有事
FMBG14L FMBG16L 是什么二极管
亲爱的阿基米德吴世勋什么时候上映
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?