线程池执行器异常
Posted
技术标签:
【中文标题】线程池执行器异常【英文标题】:ThreadPoolExecutor Exception 【发布时间】:2021-04-11 23:09:53 【问题描述】:在使用该应用程序时,我遇到了这个异常。这不是特定情况发生的。有时打开一个片段,有时将文本设置为 textview。所以我没有正确理解这个问题。
你能说点什么吗?
这是我得到的最后一个异常日志
Task android.os.AsyncTask$SerialExecutor$1@373f483 rejected from java.util.concurrent.ThreadPoolExecutor@b9965c7[Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 31]
java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2014)
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:794)
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1340)
android.os.AsyncTask$SerialExecutor.scheduleNext(AsyncTask.java:247)
android.os.AsyncTask$SerialExecutor.execute(AsyncTask.java:241)
android.os.AsyncTask.execute(AsyncTask.java:622)
android.widget.TextView.updateTextServicesLocaleAsync(TextView.java:8711)
android.widget.TextView.getTextServicesLocale(TextView.java:8658)
android.widget.TextView.getSpellCheckerLocale(TextView.java:8704)
android.widget.SpellChecker.<init>(SpellChecker.java:112)
android.widget.Editor.updateSpellCheckSpans(Editor.java:658)
android.widget.Editor.onAttachedToWindow(Editor.java:353)
android.widget.TextView.onAttachedToWindow(TextView.java:5262)
android.view.View.dispatchAttachedToWindow(View.java:14520)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1364)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6007)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
android.view.Choreographer.doCallbacks(Choreographer.java:670)
android.view.Choreographer.doFrame(Choreographer.java:606)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
android.os.Handler.handleCallback(Handler.java:739)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5417)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我的每个线程都这样调用,我不使用 AsyncTask s
new Thread(new Runnable()
public void run()
...
).start();
【问题讨论】:
可以贴一个代码示例以便更好地理解吗?这将非常有帮助 云你发布代码块导致异常?这对调试很有好处。 @faysalneowaz 没有特定的代码部分。此日志来自用户。我也不知道确切的场景。 【参考方案1】:这是一个 RejectedExecutionException,我认为是 AsyncTask 中的 execute() 抛出的。
发生这种情况有两个原因:
-
您的线程池已满(在这种情况下,9/9 线程正在使用中)
你的线程池对象被销毁了
按照您的第一个原因,您可以通过等待创建的一个线程完成它的任务,然后通过 get 函数创建一个新线程来处理您的线程池:
execute().get();
【讨论】:
您能否提供更多代码。我已经更新了我的答案。我该如何使用这个 execute().get(); 您好,从您的编辑中,您可以使用诸如 wait() 之类的东西来等待线程执行完成,这种方法的问题是它阻塞了您的 UIThread。您应该使用 AsyncTask 让 Android Evironment 在后台为您处理它,并提供更多资源。以上是关于线程池执行器异常的主要内容,如果未能解决你的问题,请参考以下文章