线程数一直增加的问题
普通简单多线程的使用方式是
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一个线程池的使用方式会导致 线程池序号一直增加。 |