如何通过按钮侦听器中断一个线程
问题描述:
我有一个按钮侦听器女巫包括一个线程睡眠和另一个按钮侦听器。如何通过按钮侦听器中断一个线程
第二个按钮侦听器必须中断该线程,我不知道如何做到这一点:
我的代码:
button1.setOnClickListener (new View.OnClickListener() {
@Override
public void onClick(View v) {
..........
button1.setEnabled(false);
button1.setVisibility(View.GONE);
button2.setVisibility(View.VISIBLE);
button2.setEnabled(true);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2800);
} catch (InterruptedException e) {
// ???????
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
button1.setEnabled(true);
button1.setVisibility(View.VISIBLE);
button2.setEnabled(false);
button2.setVisibility(View.GONE);
}
});
}
}).start();
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
..............
// Thread.interrupted(); -> does not work
}
});
} });
我怎样才能让听者BUTTON2中断线程?
答
而不是一个匿名执行的线程,使线程变成一个类变量。假设线程的名称是btnOneThread
private Thread btnOneThread;
在需要时初始化线程并启动它。
btnOneThread = new Thread(){...}
btnOneThread.start();
当BUTTON2点击呼叫
if (btnOneThread != null) {
btnOneThread.interrupt();
}
答
class TestInterruptingThread1 extends Thread{
public void run(){
try{
Thread.sleep(1000);
System.out.println("task");
}catch(InterruptedException e){
throw new RuntimeException("Thread interrupted..."+e);
}
}
b2 //
{
try{
t1.interrupt(); // t1 is the thread to be interrupted
}catch(Exception e){System.out.println("Exception handled "+e);}
}
}
答
通过调用thread.interrupt()方法。你还需要将你的Thread实例保存在你的类的一个字段中。
答
Thread t = new Thread() {...}
t.start();
和在收听:
t.interrupt();
至于
// Thread.interrupted(); -> does not work
它将从线程派生的类中工作,并且将是相同的this.interrupted()
; t.interrupted()
将在类定义之外工作。
还要注意的是isInterrupted()
不清除中断标志的方法,而interrupted()
具有清热旗的副作用。
你尝试'了Thread.interrupt();'? – 2015-02-10 08:44:22
是的,我尝试过,但正如Randev所说,不适用于anonymus – 2015-02-10 08:58:58