我想做一个有seekbar的媒体播放器。因为当按下暂停或按下停止时,seekbar应该停止进度。我想相应地停止线程。此外,当后退被按下时,我想再次取消该线程。
发布于 2011-03-19 20:27:08
使用Thread.currentThread().interrupt()
线程中断
每个线程都有一个与之关联的布尔属性,表示线程的中断状态。中断状态最初为false;当一个线程通过调用Thread.interrupt()被其他线程中断时,会发生以下两种情况之一。如果该线程正在执行低级可中断阻塞方法,如Thread.sleep()、Thread.join()或Object.wait(),它将解除阻塞并抛出InterruptedException。否则,interrupt()只设置线程的中断状态。在中断的线程中运行的代码稍后可以轮询中断状态,以查看是否已请求它停止正在执行的操作;可以使用Thread.isInterrupted()读取中断状态,并且可以使用名称不佳的Thread.interrupted()在单个操作中读取和清除中断状态。
中断是一种协作机制。当一个线程中断另一个线程时,被中断的线程不一定立即停止它正在做的事情。相反,中断是一种在方便的时候礼貌地要求另一个线程停止它正在做的事情的方式。一些方法,如Thread.sleep(),认真对待这个请求,但方法不需要注意中断。不阻塞但仍可能需要很长时间执行的方法可以通过轮询中断状态来接受中断请求,并在中断时提前返回。您可以随意忽略中断请求,但这样做可能会影响响应能力。
中断的协作性质的好处之一是,它为安全地构造可取消的活动提供了更多的灵活性。我们很少希望活动立即停止;如果活动在更新过程中被取消,程序数据结构可能会处于不一致的状态。中断允许可取消的活动清理任何正在进行的工作,恢复不变量,通知其他活动取消,然后终止。
发布于 2012-06-27 03:22:53
boolean running = true;
final Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
while(running){
//Your code
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//handler code
}
});
t.start();定义一个" running“布尔值将管理线程何时执行其代码,当您将running设置为false时,搜索栏将停止,而不会中断或终止线程。
https://stackoverflow.com/questions/5361624
复制相似问题