Android怎么结束一个线程

这是一个接受Socket通讯的线程我start()启动之后它就停止不了了导致所有的socket的包全部传到第一个启动这个线程的页面的Handler方法中问怎么通过对象名终... 这是一个接受Socket通讯的线程 我start()启动之后 它就停止不了了 导致所有的socket的包全部传到第一个启动这个线程的页面的Handler 方法中 问 怎么通过对象名终止这个线程 或者其他有效方法 网上说加个布尔表达式 我加上 对象.exit=true ;Log,i显示 exit 还是false!
class ReadHandlerThread extends Thread{ //读取服务器端数据
private Socket client;
private Handler handler;
public static boolean exit = false;
public ReadHandlerThread(Socket client,Handler handler) { //构造
this.client = client;
this.handler=handler;
}
@Override
public void run() { //run
while(!exit){
DataInputStream dis = null;
try {

value m_value = new value();
dis = new DataInputStream(client.getInputStream());
byte[] b =new byte[136];
dis.readFully(b);
String a=new String(b);
m_value.valueFormat(a);
Message msg = new Message();
msg.what = m_value.Value[1]-'0';
msg.obj=m_value;//上面全是构建数据包
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
展开
 我来答
超级DA玩家
推荐于2016-06-01 · TA获得超过356个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:77.5万
展开全部
在Java语言中,安全结束线程的方法就是“让线程的自身流程执行完”。
出现“僵尸线程”的原因:1.线程在死循环中执行。2.线程阻塞。

很明显,你的ReadHandlerThread线程发生了线程阻塞。

dis.readFully(b),你在这里调用了一个阻塞方法,由于socket的另一端一直没有发送数据,ReadHandlerThread线程一直阻塞在了这里,等待接收完136字节的数据。136字节没有接收完,readFully方法将一直处于阻塞状态。

解决方法,设置socket的等待超时值,而不是无限等待。
追问
我增加了一个判断如果登陆成功就break 跳出 
if(m_value.Value[2]=='1')
break;//登陆成功
但是,我在别的页面的java类中 new一个新ReadHandlerThread线程 线程启动但是监听不到消息 Log 显示一直卡在readFully(b) 但是我服务器端已经发过消息 而且我为了填满缓冲区 特意传了200byte 的数据
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式