Java 启动并中断,然后再次启动线程
我在android中创建活动时启动了一个线程 当单击“停止”时,它将中断线程以查看特定时间的数据,然后单击“开始”按钮启动线程 它将再次启动线程 有时它工作正常, 有时我会被错误打断Java 启动并中断,然后再次启动线程,java,android,multithreading,thread-safety,android-threading,Java,Android,Multithreading,Thread Safety,Android Threading,我在android中创建活动时启动了一个线程 当单击“停止”时,它将中断线程以查看特定时间的数据,然后单击“开始”按钮启动线程 它将再次启动线程 有时它工作正常, 有时我会被错误打断 strt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Drawer.start(); }); stp.setOn
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 executor = Executors.newFixedThreadPool(1);
然后,在“开始”按钮的onClickListener中将工作提交到此池:
future = executor.submit(runnable);
其中runnable
是您想要做的工作
返回的Future
是一种传递运行runnable
结果的东西,但也允许您执行取消操作(即要求它停止运行):
其中true
表示要中断运行它的底层线程
因此,按下开始按钮时,将future
存储在成员变量中,然后按下停止按钮时,如上所述取消它
注意,您需要使您的可运行句柄中断:这不是“免费”发生的事情。中断是一种协作机制:代码可以自由响应(或不响应)中断。假设
Drawer
是一个线程,您不能启动它两次:@AndyTurner我在中断线程后启动它..这样做好吗?
future.cancel(true);