如何在运行5秒后停止异步线程

时间:2010-11-24 22:00:43

标签: android multithreading asynchronous

必须创建线程并运行它5秒钟,然后我想停止。我怎么能这样做?

我无法用时间/毫秒做任何事情。

THX。

3 个答案:

答案 0 :(得分:3)

java中的线程是合作的 - 你不能强行停止一个线程。你可以做的是发信号停止(调用中断()或举起一个标志)然后代码自愿停止。

所以:

  1. 开始运行您的工作线程。在其中重复(在主工作循环内)检查isInterrupted()并捕获任何InterruptedExceptions - 在这种情况下退出线程。

  2. 启动TimerTask运行5秒,然后在工作线程上调用interrupt()

  3. 更新:海报解释说他已经有了一个正常工作的代码,他只需要异步运行它而不会阻止UI。

    解决方案:设置AsyncTask并在其doInBackground()方法中运行您的代码。

答案 1 :(得分:2)

使用AsyncTask.cancel(true)方法。

答案 2 :(得分:0)

很抱歉这里不清楚。这是我对同步线程的例子。 我的函数listen()运行5秒然后退出。 Listen()是一个UDP监听器......

我遇到此代码的问题,它会停止我的主线程(我的手机无响应),直到列出的()完成其5秒运行。我想使用异步线程来避免我的手机冻结。当我说我不能随时间做任何事情时,我试图说我不能在listen()函数中放置某种计时器然后测量经过时间然后在5秒后退出。不能这样做。

Thread t = new Thread() {
    public void run() {
        try {
            listen();
        } catch (IOException e) {
            Log.d(TAG, "IOException (Discovery) " + e);
            e.printStackTrace();
        }
        synchronized (this) {
            notifyAll();
        }
    }
};
synchronized (t) {
    t.start();
    try {
        t.join(5000); // 5 sec

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}