我已经知道如何停止线程,但我现在的情况有所不同,我正在从线程中的服务器监听数据
while (connected)
{
byte[] buffer = new byte[1024];
if(in.read(buffer) > 0)// waits on this line
{
//do something
}
}
现在问题是虽然我设置了connected = false;然后它也没有停止,因为它等待in.read所以,我也尝试Thread.interrupt但没有运气
答案 0 :(得分:1)
您应该切换到使用SelectableChannel
方法来读取/写入使用非阻塞I / O的套接字,并且您可以通过侦听“事件”来管理多个连接。然后,您可以避免在read()
等电话中被阻止。
不幸的是,这与你目前使用的模型有着根本不同的模式,因此转换不会快速或简单,但值得付出努力。
查看以下资源:
http://developer.android.com/reference/java/nio/channels/SocketChannel.html http://www.exampledepot.com/egs/java.nio/NbClientSocket.html
答案 1 :(得分:1)
我们需要更多信息:
connected
?InterruptedException
?通常,您的代码应如下所示:
while (connected)
{
try
{
byte[] buffer = new byte[1024];
if(in.read(buffer) > 0)// waits on this line
{
//do something
}
}
catch(InterruptedException ie)
{
// there are several ways which you can exit the loop:
// 1. you can break
// 2. set the connected flag to false
}
}
确认您确实捕获了中断异常!如果你没有捕获它,那么构建一个小的sscce兼容的例子,你只复制特定的问题(应该很容易)。
答案 2 :(得分:0)
我按照以下方式修改了代码
while (connected)
{
byte[] buffer = new byte[1024];
if(in.available() > 0)// changed this line
{
in.read(buffer)
//do something
}
}
它对我来说很好,因为in.available()语句是非阻塞的我认为