为啥要使用线程池
为什么要使用线程池1.线程池用在什么地方。1)限制线程的执行数量。2)节省线程创建和销毁的开销。3)为异步请求
为什么要使用线程池
1.线程池用在什么地方。1)限制线程的执行数量。2)节省线程创建和销毁的开销。3)为异步请求提供执行器。
2.线程池的风险。1)死锁,不过搜索没有使用共用资源,所以不存在死锁。2)资源不足,这个需要有足够的经验去调整线程池大小,目前搜索使用的是最小50,最大150,感觉这个有待调整。3)线程泄漏,如:线程抛出异常便不回收线程。不过使用Jdk自带的线程池是不会有这个问题的。
3.我们的工程是怎样用到线程池的Future<SearchResultSet> future = poolExe.submit(new SearchTask(sb,?offset, limit));return future.get(TIMEOUT, TimeUnit.MILLISECONDS);也可以直接使用,即不使用异步,如:return sb.buildResult(offset, limit);这样会减少CPU占用,但是降低了对线程的控制,可能会增加内存占用,并且如果服务端出了问题,一定会反应在web端的。
4.mysql是怎么用到线程池的。mysql使用的是连接池,把持的是网络链接,减少网络链接的创建和销毁。与线程池并不完全一样,线程池把持的是线程资源,减少线程的创建和销毁。其思想是一样的。
5.Effective Java 里有第68节 Prefer executors and tasks to threads 阐述了为什么要使用executors,它阐述的主要原因是:1)限制线程启动数量。2)从架构的角度,要把task跟executor分开,而使用threads是整合在一起的。
?