关于线程池报unable to create new native thread
最近应公司要求需要用线程池来管理多线程,一直没有深入接触过线程池,靠百度大婶,终于写出一个:
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20, 1,TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(15),new ThreadPoolExecutor.DiscardOldestPolicy());
//10是表示允许10个线程,20是最多可以有20个线程在进行或等待,1线程池维护线程所允许的空闲时间为1秒,TimeUnt.SECONDS线程池维护线程所允许的空闲时间的单位以秒为单位,下一个参数是指线程池所使用的缓冲队列为有界队列,最后一次参数是线程池对拒绝任务的处理策略抛弃旧的任务
for(int i=0;i<size;i++){
Map map=(Map) list.get(i);
String orderid = (String) map.get("orderid");
String account=(String) map.get("account");
String facesum=(String) map.get("money");
if(orderid!=null&&account!=null&&facesum!=null){
threadPool.execute(new Chongzhi1Add(orderid,account,facesum,ordersService));
Thread.sleep(produceTaskSleepTime);
}
}
但是现在问题是,程序跑一段时间后,在threadPool.execute(new Chongzhi1Add(orderid,account,facesum,ordersService));这句的时候报unable to create new native thread这个异常,重启后就好了,跑一段又报这个异常,我从网上看到说,使用有界queue可能不能很好的满足性能,需要调节线程数和queue大小,但是怎么调整呢,要怎样避免这个异常呢???请大家赐教,谢谢了!