繁体   English   中英

启动并中断,然后再次启动线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM