怎么关闭一个“阻塞”状态的线程?

在使用Swt进行TCP/IP实验时,遇到Socket.accept()导致主线程阻塞,影响界面响应。尝试多线程解决,但发现interrupt方法对socket阻塞无效,stop方法已废弃。最终采取在阻塞源头引发异常,通过关闭socket结束线程。然而,线程修改界面变量时仍会导致界面控制权暂时丢失,寻求提高实时性的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是做TCP/IP的实验,因为要用到界面编程嘛,对于我这样的小菜有这么几种选择:

MFC,Swing

别的语言真心不太会了。

而MFC的东西感觉比Java要难,关键是我手里没有合适的帮助文档。

所以就用了Swt ,有的大牛可以用swing写出很漂亮的程序,

我还是感觉就我这实力还是用swt做点好看的吧。


那么很快就会遇到一个问题,当我执行到Socket.accept()时,整个窗口都卡住了,这就导致了我的界面非常不友好

后来想到了多线程,每当有请求的时候开启一个新的线程。这样窗口就一直会对事件进行响应了。


但是这里又有一个问题,关于阻塞:

Socket.accept()的时候,线程阻塞了,虽然不影响我的窗口,

但是我想通过窗口事件,来关闭这个线程,

怎么办呢?


有人推荐我用  interrupt   方法来中断线程,

恩,这种方法的确可以用,但只是线程因 sleep  或者是  wait 方法引起的阻塞才起作用

而我用的是 socket 引起的阻塞

所以这个不好用。

还有一些推荐 stop 等方法的,哪些已经被废弃了,即使好用也不推荐啊(我用的1.7,没找到这个方法,估计java已经放弃了这个方法了吧)


我用的方法是在阻塞源头产生异常,在截获异常的方法里,结束  run  方法。

比如 关闭  socket ,会使 Socket.accept()方法产生异常 ,

这样 线程就结束了,暂时还没有想到别地方法,

对了 网上 还有的人说设置一个 变量,每次循环都去检查变量, 如果 变量 为 false ,退出循环

在 个别情况这个也可以满足需求,但是当线程阻塞了,它根本不会去检查那个标示。


那么

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值