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

来源:互联网 发布:怎么看淘宝卖家的类目 编辑:程序博客网 时间:2024/04/29 20:37

还是做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 ,退出循环

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


那么到此标题内容的答案已经分享完毕。


但是当线程需要改变界面变量的内容时,情况好像还会更加复杂,即虽然我开启了一个新的线程,

但是线程里面有对我界面修改的方法,在线程执行时,我仍然会暂时失去窗口的控制权,

但并不是不响应,而是,当任务线程执行完毕,继续响应你的请求,

问题是:实时性不好,有没有高手碰到过的,分享一下解决办法吧,谢谢哈!

原创粉丝点击