有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    假设Drawer是一个线程,则不能启动它两次:"It is never legal to start a thread more than once"。你关于如何编写这段代码的基本假设是有缺陷的

    我建议不要直接使用线程。相反使用ExecutorService,例如:

    ExecutorService executor = Executors.newFixedThreadPool(1);
    

    然后,在“开始”按钮的onClickListener中将工作提交到此池:

    future = executor.submit(runnable);
    

    其中runnable是你想做的工作

    返回的Future是一个传递运行runnable结果的东西,但也允许您执行取消它(即要求它停止运行)之类的操作:

    future.cancel(true);
    

    其中true表示要中断运行它的底层线程

    因此,按下开始按钮时,将future存储在成员变量中,然后按下停止按钮时,如上所述取消它

    请注意,您需要设置可运行句柄中断:这不是“免费”发生的事情。中断是一种协作机制:代码可以自由响应(或不响应)中断