关于线程控制
2015-08-31 09:38
204 查看
最近在写一个聊天室程序,最近才开始用java,还是有点生疏。
线程,亮点是线程的异步性,难点是线程的同步,理解并且控制好线程,对线程的学习和应用至关重要!
问题:
写一个线程,让他一直运行在主程序运行期间,如何安全有效的关闭线程?
常用做法:
while(flag)
{
XXX//do something....
}
void close(){
this.flag=false;
}
通过这种主动标志,有时候可以让线程停止。但是如果,在XXX处出现让线程阻塞的情况,显然close()方法无法关闭线程,而且会造成线程的阻塞。
比如,XXX可能是,A=B.accept();//假如B没有accept到A,那么线程就会阻塞在这个地方.
解决方案:
void close(){
this.flag=false;
new A(XXX);//此处应是任何可以使线程运行下去的方法,保证线程运行到while-loop对flag的判断
}
当然在实现程序中,要比这复杂,但是基本思路是这样,欢迎批评指正!
线程,亮点是线程的异步性,难点是线程的同步,理解并且控制好线程,对线程的学习和应用至关重要!
问题:
写一个线程,让他一直运行在主程序运行期间,如何安全有效的关闭线程?
常用做法:
while(flag)
{
XXX//do something....
}
void close(){
this.flag=false;
}
通过这种主动标志,有时候可以让线程停止。但是如果,在XXX处出现让线程阻塞的情况,显然close()方法无法关闭线程,而且会造成线程的阻塞。
比如,XXX可能是,A=B.accept();//假如B没有accept到A,那么线程就会阻塞在这个地方.
解决方案:
void close(){
this.flag=false;
new A(XXX);//此处应是任何可以使线程运行下去的方法,保证线程运行到while-loop对flag的判断
}
当然在实现程序中,要比这复杂,但是基本思路是这样,欢迎批评指正!
相关文章推荐
- 微信公众平台开发之天气预报功能
- 2015-08-31 阅读摘要
- java学习基础泛型和其他对象
- 我不会死性不改
- 一款基于微客服的仿微信的聊天软件
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第九节:卡通渲染
- 视图解析器ViewResolver
- 简单比较C语言中的execl()函数与execlp()函数
- C的xml编程-libxml2(1) http://blog.sina.com.cn/s/blog_6a1837e90100ns2q.html
- Ubuntu14.04 vim+Ctags+Taglist
- ArcGIS4Android开发----空间查询
- 为什么程序员这么“钟情”于月黑风高夜
- Activity和Task的启动模式有哪些?
- STL源码剖析 [容器](十三)[stl_tree.h]
- 配置sshd_config中的PermitRootLogin设置root登录或者禁止root登录
- zookeeper3.4.5自动清理日志
- jQuery实现带有洗牌效果的动画分页实例
- MySQL主从配置
- [刷题]k Sum II
- Eclipse常用快捷键