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