Board logo

标题: web项目中线程池的正确使用方式(2) [打印本页]

作者: look_w    时间: 2019-5-13 10:24     标题: 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线程池。线程池也可以使用全局变量的形式。这样就避免了线程池序列号递增的问题。保证使用一个线程池。。。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0