当前位置: 首页 > 知识库问答 >
问题:

如何在一定时间到期后立即停止线程?[副本]

景元徽
2023-03-14

我遇到了一个问题,试图在经过一定时间后立即停止一个线程,因为thread.stop和类似的其他线程已经折旧。

我试图停止的线程使用我的鼠标,我需要停止它,以便我可以用其他方式使用我的鼠标。

我在想的是下面的代码,它只是制作另一个线程来观察主线程已经运行了多长时间,如果它是活的,就停止它,但我无法完成这一点。

public void threadRun(int a) {
    Thread mainThread = new Thread(new Runnable() {
        @Override
        public void run() {
            // does things with mouse which may need to be ended while they
            // are in action
        }
    });

    Thread watchThread = new Thread(new Runnable() {
        @Override
        public void run() {
            if (timeFromMark(mark) > a) {
                if (mainThread.isAlive()) {
                    // How can I stop the mainThread?
                }
            }

        }
    });

}

共有1个答案

符棋
2023-03-14

您需要为扩展runnable的第二个线程定义一个类,并将第一个线程作为参数传递。

然后您可以停止第一个线程。

但不是手动执行,而是查看Java ThreadPoolExecuter及其AwaitTermination(long timeout,TimeUnit unit)方法。(http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/threadpoolexecutor.html)

    ExecutorService executor = Executors.newFixedThreadPool(1);

    Runnable r = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                System.out.println("doing stuff");
                Thread.sleep(10000);
                System.out.println("finished");
            } catch (InterruptedException e) {
                System.out.println("Interrupted before finished!");
            }
        }
    };

    executor.execute(r);
    executor.shutdown();
    try {
        executor.awaitTermination(1, TimeUnit.SECONDS);
        executor.shutdownNow();
    } catch (InterruptedException e) {
        //
    }
    System.out.println("Thread worker forced down. Continue with Application...");
doing stuff
Interrupted before finished!
Thread worker forced down. Continue with Application...

最后两个消息在时间上几乎相等,并且可能改变位置(它的两个不同的线程,继续)

 类似资料:
  • 我试图找出如何使python停止接受输入后一定数量的时间。 到目前为止,我已经得到了工作,但不会停止程序,直到用户按下回车键。如果有关系,我在蟒蛇提示符中运行这个文件。 换句话说,我想做一些东西,这样Python就不会再等待输入了。如果用户在计时器结束前输入了任何东西,程序运行正常,这很好,除非玩家什么也没输入。如果他们甚至不按回车键,那么整个过程就会停止。(我也是Python的绝对初学者。事实上

  • 问题内容: 有什么办法可以阻止python.exe在完成后立即关闭?它关闭的速度比我读取输出的速度快。 这是程序: 问题答案: 您不能-全局地,即对于每个python程序。这是一件好事-Python非常适合编写脚本(自动执行操作),并且脚本应该能够在无需任何用户交互的情况下运行。 但是,您始终可以在程序结束时要求输入,从而有效地使程序保持活动状态,直到您按回车键为止。使用在Python 3 (或在

  • 我在LibGDX做一个项目。这是一款2d平台游戏。你可以说这就像超级马里奥。 这就是我如何把我的球员移到右边: 当我离开钥匙时,玩家仍然在移动一点。(我想他的身体上仍然有“线性冲动”的力量)。 我怎样才能让它停下来? 我的问题可能很简单:拿着钥匙,在LibGDX上向一个方向移动身体的最佳方式是什么。当我离开钥匙时,玩家立即停止。 BDW——我尝试过“setTransform”,当身体触摸其他物体时

  • 我在我的工作区中使用STS IDE运行了几个Spring Boot应用程序,在我对其中一个项目进行maven更新后,每个项目都在应用程序启动过程后立即停止。我甚至创建了一个最小的例子,只是为了开始一些事情,同样的事情发生了。 这是我的pom.xml 即使是那些入门示例也会在启动后立即停止。我会非常感谢这里的一些帮助。 编辑:正如Alexandru Marina在评论中所说,我使用的是快照而不是稳定

  • 我的应用程序设置为(非故意)服务将使用gps/网络侦听器轮询位置。它工作得很好,因为我负责服务何时结束(即在找到新位置或达到超时时调用stopSelf())。然而,我最近读到,intentService可能更适合长时间运行的任务,因为它不是在ui线程上运行的,而是在自己的工作线程上运行的。问题是,现在它不允许服务在任何时间运行(我假设这是因为服务中没有任何活动发生,而侦听器等待接收位置,因此服务本