java.lang.OutOfMemoryError:pthread_create(1040KB堆栈)失败:请尝试

当我调用threadExecutor方法大量

fun startAnimation(): Unit { sPool.scheduleAtFixedRate(taskQu, 0, 1000, TimeUnit.MILLISECONDS) } 

这会导致这个错误提示, sPool是java的ThreadExecutors

val sPool = Executors.newScheduledThreadPool(2)!!

taskQu是异步计时器任务

  val taskQu = object : TimerTask() { override fun run() { uihandler.obtainMessage().sendToTarget() } } 

我有这个提示

 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again at java.lang.Thread.nativeCreate(Native Method) at java.lang.Thread.start(Thread.java:1063) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:921) at java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1556) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:310) at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:567) 

那么,这个问题出现在哪里呢?

我使用下面的程序做了同样的事情,它工作正常:

 public class ThreadExecutionTest { /** * @param args */ ScheduledExecutorService executor=Executors.newScheduledThreadPool(2); public static void main(String[] args) { // TODO Auto-generated method stub ThreadExecutionTest test=new ThreadExecutionTest(); test.executeThread(); } public void executeThread() { Runnable task=()-> System.out.println("executing thread "+Thread.currentThread().getName() ); executor.scheduleAtFixedRate(task, 0, 1000, TimeUnit.MILLISECONDS); } 

}

你得到的异常是OutofMemoryError,因为多线程在每秒之后被创建,所以在某个时候抛出这个错误。 请检查你声明的“val sPool = Executors.newScheduledThreadPool(2)!!”,如果这是在方法中声明的话,那么把它移除并在方法之外声明(在类级声明)。