Java 如何停止线程
只是一个小问题,我想跳下面的线程,但我不知道我该怎么做。请帮帮我。谷歌的帮助这次没用了Java 如何停止线程,java,multithreading,interrupt,Java,Multithreading,Interrupt,只是一个小问题,我想跳下面的线程,但我不知道我该怎么做。请帮帮我。谷歌的帮助这次没用了 new Thread(){ public void run() { while(!isInterrupted()){ try { if (sock1!=null){ sock1.setTcpNoDelay(true); if (btsar1.lengt
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...
新线程(){
公开募捐{
而(!isInterrupted()){
试一试{
if(sock1!=null){
sock1.setTcpNoDelay(true);
如果(btsar1.length>0){
dos1=新的DataOutputStream(sock1.getOutputStream());
bwrtr1=新的缓冲写入程序(新的OutputStreamWriter(
dos1),300);
dos1.写入(btsar1);
set1free=false;
Log.e(“通信”,“书面(1.1)”);
读取器1.读取器(4);}
}}捕获(IOE异常){
e、 printStackTrace();
}捕获(NullPointerException e2){
e2.printStackTrace();
}
}
}}.start();
//.中断() 终止线程的最好方法是让它结束。所以,在<代码>中添加一个布尔标志,而<代码>,并让方法(或其他方法)公开它,以便将其设置为false。然后,您的线程将在交互完成后自然退出。您只需要一个对线程的引用:
Thread t = new Thread(...);
然后你可以打断它:
t.interrupt();
一个想法:停止使用匿名线程
每当您发现自己的线程正在执行复杂的操作时,可以创建一个单独的类来扩展线程,该类可用于控制和监视行为,或者使用抽象的未来和线程池来完成这项工作
如果您继续使用这样的线程,您将有一个极其不可维护和不可恢复的代码
如何优雅地停止线程?
bool keepWorking = true;
while(keepWorking) {
// keep working
}
synchronized void stopWork() {
keepWorking = false;
}
// in other thread
threadObj.stopWork();
线程。中断
方法用于停止等待较长时间的线程(例如,等待输入)
请看这篇文章-
范例
“请帮帮我。”请正确拼写单词。这不是短信。对不起,是我的错。。。我有点赶时间^^一篇非常好的文章的可能重复:他的方法可能重复:while(!interrupted)
比引入一个额外的不必要的布尔标志要好。特别是对于可中断的I/O方法。线程名称在另一个活动中给出,从该活动调用
Thread t = new Thread(){
... // content unchanged
};
t.start();
.....
t.interrupt();
public void stop() {
Thread moribund = waiter;
waiter = null;
moribund.interrupt();
}