怎么关闭一个“阻塞”状态的线程?
来源:互联网 发布:怎么看淘宝卖家的类目 编辑:程序博客网 时间: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 ,退出循环
在 个别情况这个也可以满足需求,但是当线程阻塞了,它根本不会去检查那个标示。
那么到此标题内容的答案已经分享完毕。
但是当线程需要改变界面变量的内容时,情况好像还会更加复杂,即虽然我开启了一个新的线程,
但是线程里面有对我界面修改的方法,在线程执行时,我仍然会暂时失去窗口的控制权,
但并不是不响应,而是,当任务线程执行完毕,继续响应你的请求,
问题是:实时性不好,有没有高手碰到过的,分享一下解决办法吧,谢谢哈!
- 怎么关闭一个“阻塞”状态的线程?
- 在inputstream.read()的阻塞状态下,如何关闭一个intentservice呢
- 如何结束阻塞状态的线程
- 线程的生命周期---运行和阻塞状态
- 线程阻塞怎么结束
- 一个线程阻塞的读写对象 .NET
- 子线程阻塞的一个解决方案
- 一个线程阻塞引起的超时问题
- Java线程状态、线程停止、线程阻塞
- Java线程状态、线程停止、线程阻塞
- 线程阻塞状态实例分析
- 初见Java多线程(三、线程的阻塞状态)
- Run线程(阻塞线程) 如何关闭
- 线程的阻塞+通过外部干涉终止一个线程
- java 关闭一个正在执行的线程
- java 关闭一个正在执行的线程
- 如何优雅的关闭一个线程
- 根据线程状态关闭对话框
- 痴心球迷自费赴昆明告别浐灞 小毛想安慰却哽咽
- 模拟的和数字的认识
- struts2标签判断集合是否为空!
- silverlight butten按钮连接http或FTp
- 网络编程专题总结
- 怎么关闭一个“阻塞”状态的线程?
- 一个硬件高手的设计经验分享
- STL & Boost 相关中文信息收集(持续更新中)
- KITL 解析
- 第二章 Makefile总述
- 一些Android莫名其妙的錯誤,并探討其解決或者迴避的辦法
- 开关电源的PCB设计规范
- Map/Reduce中Join查询实现
- 打印日志开关的定义方法