繁体   English   中英

如何在Android中停止多线程

[英]How to stop multiple thread in android

现在我要进行线程处理,我只有一个线程,并且通过增加计数将使线程运行几次。 如果我通过使用线程本能来停止线程,它将停止所有正在处理的线程。

这是我尝试过的:

      if (null != image && server.threadCount <=10) {
            startThread = new Thread(mThread);
            startThread.start();

        }
        else
        {
            server.threadCount--;
        }
    }


    public static class RunnableThread implements Runnable {

        public void run() {
            server.threadCount++;
        /*    if (server.threadCount <=10) {
        Log.v("count",String.valueOf(server.threadCount));
                server.threadCount++;
            } */
        }
    }
}

如果我使用startThread.interrupt(); 它会阻止孔螺纹或电流。

我需要停止特定线程,并且如果需要停止整个线程。

这将是我在此处提供的替代解决方案。 首先,我必须警告使用线程计数很容易出错并且很危险。 由于某些并发问题,您可能会错过减小或增大变量的机会。 在这里,我将为您解决上述问题,并为您提供替代解决方案。

您的问题的解决方案:

  1. 第一件事是,在上面的示例中,当您调用startThread.interrupt()时,您仅引用了一个线程,因此,该操作将帮助您仅停止当时引用的一个线程。

  2. 其次,我建议您将引用添加到列表,特别是并发集合或同步集合。 您可以从该列表中迭代线程引用,并在需要标记中断时调用interrupt()。

例如:

List<Thread> threadList = 
    Collections.synchronizedList(new ArrayList<Thread>());
    ......
    startThread = new Thread(mThread);
         startThread.start();
    threadList.add(startThread);
    ......
    @Override
    public void onDestroy() {
    super.onDestroy();

    synchronized(threadList) {
   Iterator<String> iterator = threadList.iterator(); 
   while (iterator.hasNext())
      Thread startThread = iterator.next();
    startThread.interrupt();
   }}
  1. 根据中断标志停止线程。

替代和首选解决方案:

  1. 用您要使用的线程数创建一个线程池。 您可以调用shutdown()或shutdownNow()方法来实现上述目的。此调用会中断正在处理任务的线程。 例如:

     ExecutorService executer = Executors.newFixedThreadPool(10); executor.execute(YourRunnableHere); /*If you have 10 you can use a for loop to execute your runnables. */ ....... @Override public void onDestroy() { super.onDestroy(); executor.shutdownNow(); } 
  2. 在上面的示例中,您创建了一个线程池。

    • 线程池是线程池。 在执行程序上提交或执行的任务由线程池中的线程处理。 在上面创建一个10个线程的线程池。 执行器可以并行执行10个任务。
    • 执行器用于管理任务的执行。 它们还用于中断线程。 这是上面示例的简短介绍。

您可以在线了解更多关于Executors和Threadpool的信息,也可以阅读针对Android“ Efficient Android Threading”的“ Java Concurrency in Practice”一书。 希望对您有所帮助。 谢谢。

执行程序简短教程:

您可以使用下面的链接快速了解执行器或其他并发实用程序。 这为您提供了一些并发实用程序知识。 注意:在侧面导航栏中查看其他实用程序。

执行官简短教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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