如何在java中关闭正在阻塞的线程
我现在在servlet中开了一个线程来接收通过socket传回来的数据,当没有数据接收的时候该线程会阻塞在一个while语句中(length = in.read(dates);),为了程序的稳定和安全,想在前台页面中添加一个按钮通过调用servlet的方式来手动的关掉该线程,在网上搜了不少资料都没有很好的解决,请高手指点一下,说说思路即可,谢谢!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看看这篇文章Why Are Thread.stop, Thread.suspend
文章里建议这样停止线程
或者可以用Channel。从java1.4开始提供了一个接口InterruptibleChannel,实现了该接口的类可以使用Thread.interrupt()中断阻塞的I/O,我没怎么用过Java的Socket,不过刚才查过API发现Socket有个方法getChannel()返回SocketChannel,可以试一下用这个Channel
我测试了以下两种I/O操作,
类似这样读取数据
当我分别调用in1和in2所在线程的interrupt()方法后,in1线程终止并关闭了reader,但in2仍然接收输入
个人认为用AJAX传个标识位到后台,由后台类来具体实现
可以用线程的 destory 方法,但不推荐,应该自己通过一些标志位做好控制。