[英]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(); 它会阻止孔螺纹或电流。
我需要停止特定线程,并且如果需要停止整个线程。
这将是我在此处提供的替代解决方案。 首先,我必须警告使用线程计数很容易出错并且很危险。 由于某些并发问题,您可能会错过减小或增大变量的机会。 在这里,我将为您解决上述问题,并为您提供替代解决方案。
您的问题的解决方案:
第一件事是,在上面的示例中,当您调用startThread.interrupt()时,您仅引用了一个线程,因此,该操作将帮助您仅停止当时引用的一个线程。
其次,我建议您将引用添加到列表,特别是并发集合或同步集合。 您可以从该列表中迭代线程引用,并在需要标记中断时调用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();
}}
替代和首选解决方案:
用您要使用的线程数创建一个线程池。 您可以调用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(); }
在上面的示例中,您创建了一个线程池。
您可以在线了解更多关于Executors和Threadpool的信息,也可以阅读针对Android“ Efficient Android Threading”的“ Java Concurrency in Practice”一书。 希望对您有所帮助。 谢谢。
执行程序简短教程:
您可以使用下面的链接快速了解执行器或其他并发实用程序。 这为您提供了一些并发实用程序知识。 注意:在侧面导航栏中查看其他实用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.