首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

web项目中线程池的正确使用方式(2)

web项目中线程池的正确使用方式(2)

web项目中正确使用线程池的方法


应该是创建一个静态变量的线程池,然后不要每次都去new一个局部变量,有线程时都丢到这个线程池中去跑。


static final ExecutorService executors = Executors.newCachedThreadPool();


但是使用静态变量的线程池会出现一个问题,就是不能对线程池进行shutdown,否则线程任务就submit不进去了。

所以一般静态变量共用的线程池是不shutdown的。

也就是无法通过如下方法知道线程是否运行结束了:

TaskRunnable task = new TaskRunnable();
    ExecutorService excutor = Executors.newFixedThreadPool(threadSize);
    for (int i = 0; i < threadSize; i++) {
        excutor.submit(task);
    }
    excutor.shutdown();
    while (!excutor.isTerminated()) {
    }

如果需要知道线程池中的任务是否运行结束如下操作:

用Future<Boolean> f=pool.submit(t);,然后任务用implements Callable<Boolean>,等所有县城的f.get();返回的是true的时候就是所有线程执行完毕。这样的话就不需要shutdown线程池。线程池也可以使用全局变量的形式。这样就避免了线程池序列号递增的问题。保证使用一个线程池。。。
返回列表