Discuss / Java / 我的理解

我的理解

Topic source

为了防止出现线程耗尽这种局面,第二种async方法的策略是增加线程:在方法内部又new了一个线程,由这个新的线程去处理耗时的部分,方法本身不去等待线程执行完毕,而是直接返回DefferedResult,异步就体现在这个地方。

老铁们,我说的对吗?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

可以启动新线程,也可以扔到线程池执行

我觉得不对。我理解的是如果你都丢给线程池去管了那么本身线程池就是有上限的。

如果每次都去开一个新线程那还要线程池做什么?

线程池的好处是减少每次new一个thread和destroy一个thread的代价。

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

线程池是可以没有上限的,实际上Executors.newCachedThreadPool()默认创建的那个池上限是Integer.MAX

线程池的好处是可以保留一定数量的idle线程,防止频繁创建和销毁线程

谢谢廖老师。

我还是认为线程池是一个更好的方式呀。去开新的线程就失去了线程池的优点了。

以及如果线程池没有上限那感觉就会把server拖垮(当然如果有这种级别的需求也没有办法)


  • 1

Reply