ThreadPoolExecutor 线程池使用

挤不上公交车的路人甲 2014-10-09 04:28:21
public abstract class AbsBaseProvider {

private final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();

private final ThreadPoolExecutor mThreadPool = new ThreadPoolExecutor(5, 20, 20, TimeUnit.SECONDS, workQueue);







protected synchronized void loadData(DataContext dc, String url) {
mThreadPool.execute(new OTGInteractive(dc, url));
mThreadPool.shutdown();

// new Thread(new Interactive(dc, url)).start();

}





private class Interactive implements Runnable {

private final DataContext dc;

private final String url;

public OTGInteractive(DataContext dc, String url) {
this.dc = dc;
this.url = url;
}

@Override
public void run() {

try {
System.out.println("test…...");
} catch (Exception e) {

if (e instanceof AppException) {

}
else {

}
if (mListener != null) {
mListener.onServerError();
}
sLogger.e("error", e.toString());
e.printStackTrace();
}

});

}

}


}



以上是定义的线程池类

使用时

的问题就是 同一个AbsBaseProvider对象 只能调用一次 loadData方法,调用第二次的时候就会报如下错误。
java.util.concurrent.RejectedExecutionException: Task com.bmwgroup.connected.social.provider.AbsBaseProvider$OTGInteractive@459cb858 rejected from java.util.concurrent.ThreadPoolExecutor@45d0cac0[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]

at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339)


我使用的是LinkedBlockingQueue 为什么还会抱这样的错误呢 该如何使用呢??
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 baohuan_love 的回复:
楼主参考这篇文章http://blog.sina.com.cn/s/blog_6145ed81010143l8.html
已解决 ,多谢
  • 打赏
  • 举报
回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧