[英]Start and Interrupt and Again Start a Thread
我在android中创建活动时启动了一个线程
当单击停止时,它将中断线程以在特定时间查看我的数据,之后我通过单击启动按钮启动线程,它将再次启动线程
有时它可以正常工作,有时我会出现中断错误,
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(); });
该怎么办?
假设Drawer
是一个线程,则不能两次启动它: “永远不可以多次启动一个线程” 。 关于如何编写此代码的基本假设是有缺陷的。
我建议不要直接使用线程。 代替。 使用ExecutorService
,例如:
ExecutorService executor = Executors.newFixedThreadPool(1);
然后,在开始按钮的onClickListener中将工作提交到该池:
future = executor.submit(runnable);
其中, runnable
是你想要做的工作。
返回的Future
传达了运行runnable
的结果,但还允许您执行取消操作(即要求其停止运行):
future.cancel(true);
其中true
表示您要中断正在运行它的基础线程。
因此,当您按下开始按钮时,将future
存储在一个成员变量中,然后当您按下停止按钮时,如上所述将其取消。
请注意,您需要使可运行的句柄中断:这不是“免费”发生的事情。 中断是一种合作机制:代码可以自由响应中断(或不响应)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.