多线程一小问题,大家帮帮忙! 多线程中如何加标志位,来随时结束某一线程具体怎样实现?我是菜鸟,希望大家尽量说的详细些。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,菜鸟还关心多线程啊。一般的办法是在线程类中提供一个方法,比如askQuit(),需要该线程结束是调用该方法即可。而该方法也很简单,设置一个成员变量的标志为即可。比如:mAskQuit=true。然后,在run()方法里应该适时检查该变量的值,当mAskQuit==true时自动退出。注意,在不严格的情况下,这里不需要同步处理。一个简单的例子:class ThreadA implements Thread{protected boolean mAskQuit=false;public void askQuit(){ mAskQuit=true;}protected void run(){ while(mAskQuit==false){ //... }} 你举的例子,当run()里的语句可以主动执行完的情况下加入while(mAskQuit==false)确实管用,但我的情况是,run()里的语句不能主动执行完,因为里面含有接收udp数据报的语句,当对方不发数据过来时,程序一直停在那里等待接收,这时我如果要停止这个线程用你的方法改变标志位自然就不好使了,你说呢 一个原则:线程应该由自己结束自己。所以最好应该使用我说的方式。另外,我写的只是一个例子,具体写法可以不同。你说的这句话“程序一直停在那里等待接收”可能不严格。在等的时候,就应该同时检查mAskQuit的状态,而不是无限制傻等。 swing延迟显示的问题 老问题:在命令行下执行jar包的问题 java 五子棋 怎样保存以放上的棋子的坐标点 急!哪位高手指点一下怎么用JAVA实现Windows资源管理器搜索界面中的搜索选项部分? ???求短信的相关知识或例子,必给分! 怎样在API文档中查找一个函数的详细资料 怎样修改系统时间和日期? 如何控制JOptionPane.showOptionDialog弹出对话框的大小? 哪里有jdk1.1.8下载? 哪里有下载Jcreater的呀 异常应该怎样抛?(静态变量初始化) 谁用过rowset的CachedRowSet
一般的办法是在线程类中提供一个方法,比如askQuit(),需要该线程结束是调用该方法即可。
而该方法也很简单,设置一个成员变量的标志为即可。比如:mAskQuit=true。然后,在run()方法里应该适时检查该变量的值,当mAskQuit==true时自动退出。
注意,在不严格的情况下,这里不需要同步处理。
一个简单的例子:
class ThreadA implements Thread{
protected boolean mAskQuit=false;
public void askQuit(){
mAskQuit=true;
}
protected void run(){
while(mAskQuit==false){
//...
}
}
另外,我写的只是一个例子,具体写法可以不同。
你说的这句话“程序一直停在那里等待接收”可能不严格。在等的时候,就应该同时检查mAskQuit的状态,而不是无限制傻等。