Thread.java中的java.lang.InternalError

时间:2017-10-20 05:29:38

标签: java android multithreading

在我的应用程序中,我在某些设备上遇到了一个奇怪的崩溃。我之前从未见过这个错误。这是堆栈跟踪

Non-fatal Exception: java.lang.InternalError: Thread starting during runtime shutdown
       at java.lang.Thread.nativeCreate(Thread.java)
       at java.lang.Thread.start(Thread.java:1063)
       at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:921)
       at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:989)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)  

我不知道如何解决它。请帮帮我!

1 个答案:

答案 0 :(得分:1)

从android源码开始,当nativeCreate中的线程发生内部异常时,正确的原因是进程运行时线程处于关闭状态:

 // Atomically start the birth of the thread ensuring the runtime isn't        shutting down.
    bool thread_start_during_shutdown = false;
   {
    MutexLock mu(self, *Locks::runtime_shutdown_lock_);
    if (runtime->IsShuttingDownLocked()) {
      thread_start_during_shutdown = true;
    } else { 
      runtime->StartThreadBirth();
    }
  }
  if (thread_start_during_shutdown) { 
    ScopedLocalRef<jclass> error_class(env, env->FindClass("java/lang/InternalError"));
    env->ThrowNew(error_class.get(), "Thread starting during runtime shutdown");
    return;
  } 
相关问题