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

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

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

线程数一直增加的问题



普通简单多线程的使用方式是


       Thread t=new Thread();           
        t.start();//启动线程对象t  



但是在web项目中发现查看控制台这种情况会导致线程数一直增加:

thread-1
thread-2
thread-3
.......

thread-50
thread-51
thread-52


这种情况下说明线程没有被关闭回收。

当线程数太多时,肯定会导致内存溢出或者影响服务器性能等。



所以我们在使用多线程时,应该尽量多使用线程池。

线程池在正确使用的情况下会替我们管理线程的回收关闭,以及处理线程的等待等等。


一般的线程池在main中使用的方式:

// 多线程线程池
                       Thread  myThread=new Thread();
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(myThread);
executorService.shutdown();


shutdown是关闭线程池,不再接受新任务,等线程池中已经submit的线程运行完之后线程池就处于关闭状态了。


很多情况下线程池是必须调用shutdown的,否则当使用的是CachedThreadPool类型的线程池时线程数还是会一直增加直到溢出。



线程池序号一直增加的问题


我们这里使用了FixedThreadPool类型的线程池。

在每次action中使用

// 多线程线程池
                       Thread myThread=new Thread();
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(myThread);
executorService.shutdown();




发现虽然线程数没在增加了 但是线程池的数量一直在增加。

线程池序号一直增加

pool-1-thread-1
pool-2-thread-1
pool-3-thread-1
pool-4-thread-1



这种情况说明线程池在web项目中没有得到正常关闭。



因为我们的web项目spring框架中,局部变量的生命周期是受spring框架来掌控的。


所以每次都new一个线程池的使用方式会导致 线程池序号一直增加。
返回列表