Thread thread;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yippi);
final Handler hn=new Handler();
final TextView text=(TextView)findViewById(R.id.TextView01);
final Runnable r = new Runnable()
{
public void run()
{
text.settext("hi");
}
};
thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(1750);
hn.post(r);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
thread.stop();}
这里的代码。我无法阻止可运行的线程。此外,不推荐使用thread.stop()
和thread.destroy()
。有人能帮助我吗?而且我也不明白如何使用thread.interrupt()
方法停止线程。怎么了?
答案 0 :(得分:2)
JavaDoc for Thread.stop()列出了以下文章作为不推荐使用stop()的原因的解释:http://docs.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html
stop的大多数用法应该由代码修改,该代码只是修改某个变量以指示目标线程应该停止运行。目标线程应该定期检查此变量,并且如果变量指示它将停止运行,则以有序的方式从其run方法返回。为确保快速通信停止请求,变量必须是易失性的(或者必须同步对变量的访问)。
interrupt()更适合阻止某些Thread等待某些东西,这可能不会再出现了。如果你想结束线程,最好让它的run()方法返回。
答案 1 :(得分:0)
创建一个布尔变量来停止线程并在while(boolean)
而不是while(true)
中使用它。
答案 2 :(得分:0)
您可以使用Thread.interrupt()来触发线程中的InterruptedException。我在下面添加了演示行为的代码。 mainThread是您的代码所在,而计时器Thread仅用于演示延迟触发中断。
public class Test {
public static void main(String[] args) {
final Thread mainThread = new Thread() {
@Override
public void run() {
boolean continueExecution = true;
while (continueExecution) {
try {
sleep(100);
System.out.println("Executing");
} catch (InterruptedException e) {
continueExecution = false;
}
}
}
};
mainThread.start();
Thread timer = new Thread() {
@Override
public void run() {
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Stopping recurring execution");
mainThread.interrupt();
}
};
timer.start();
}
}
答案 3 :(得分:0)
您可以使用Thread的中断方法尝试停止线程,如下面的代码。 可能对你有用。
public class InterruptThread {
public static void main(String args[]){
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
System.out.println("Thread is Runing......");
sleep(1000);
}
} catch (InterruptedException e) {
// restore interrupted status
System.out.println("Thread is interrupting");
Thread.currentThread().interrupt();
}
}
};
thread.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Will Interrupt thread");
thread.interrupt();
}
}