java启动并中断,然后再次启动线程
我在安卓中创建活动时启动了一个线程
当点击“停止”时,它会中断线程以查看特定时间的数据,然后点击“开始”按钮启动线程 它会再次启动线程
有时它能正常工作, 有时我会被错误打断
strt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Drawer.start();
});
stp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Drawer.interrupt(); });
怎么办
# 1 楼答案
假设
Drawer
是一个线程,则不能启动它两次:"It is never legal to start a thread more than once"。你关于如何编写这段代码的基本假设是有缺陷的我建议不要直接使用线程。相反使用
ExecutorService
,例如:然后,在“开始”按钮的onClickListener中将工作提交到此池:
其中
runnable
是你想做的工作返回的
Future
是一个传递运行runnable
结果的东西,但也允许您执行取消它(即要求它停止运行)之类的操作:其中
true
表示要中断运行它的底层线程因此,按下开始按钮时,将
future
存储在成员变量中,然后按下停止按钮时,如上所述取消它请注意,您需要设置可运行句柄中断:这不是“免费”发生的事情。中断是一种协作机制:代码可以自由响应(或不响应)中断