只是一个小问题,我想改进以下主题,但我不知道应该怎么做。请帮我。谷歌帮助这次没用。
new Thread(){
public void run() {
while(!isInterrupted()){
try {
if (sock1!=null){
sock1.setTcpNoDelay(true);
if (btsar1.length > 0) {
dos1 = new DataOutputStream(sock1.getOutputStream());
bwrtr1 = new BufferedWriter(new OutputStreamWriter(
dos1), 300);
dos1.write(btsar1);
set1free = false;
Log.e("Communication", "written(1.1)");
Reader1.reader(4);}
}} catch (IOException e) {
e.printStackTrace();
}catch (NullPointerException e2){
e2.printStackTrace();
}
}
}}.start();
//.interrupt(); <-- or kinda that...
有人可以提供一个好的工作,阻止这个吗?
答案 0 :(得分:1)
您只需要对线程的引用:
Thread t = new Thread(...);
然后你可以打断它:
t.interrupt();
答案 1 :(得分:1)
Thread t = new Thread(){
... // content unchanged
};
t.start();
.....
t.interrupt();
答案 2 :(得分:0)
终止线程的最佳方法是让它完成。因此,在while
中添加一个布尔标志,并让方法(或其他方式)公开它,以便将其设置为false。然后你的线程会在交互完成后自然退出。
答案 3 :(得分:0)
一个想法:停止使用匿名线程!
每当你发现自己处于线程正在做复杂事情的情况时,要么创建一个扩展线程的单独类,可以用来控制和监视行为,或者使用抽象的Future和ThreadPool来完成工作
如果你继续使用这样的线程,你将拥有一个非常难以维护和无法扩展的代码。
如何优雅地停止线程?
bool keepWorking = true;
while(keepWorking) {
// keep working
}
synchronized void stopWork() {
keepWorking = false;
}
// in other thread
threadObj.stopWork();
答案 4 :(得分:0)
Thread.interrupt
方法用于停止等待很长时间的线程(例如,用于输入)
看一下这篇文章 - How to Stop a Thread or a Task
例如
public void stop() {
Thread moribund = waiter;
waiter = null;
moribund.interrupt();
}