多线程并发编程学习笔记9(小滴课堂)------线程池及Executor框架





它只会使用10个线程。因为我们设置了它的容量。

我们现在把这个队列容量设置为20.

我们可以看到这里它使用了20个线程。但是出了异常,这个后面我们会学习。
我们现在使用一下我们的callable:





一般我们如果是想在线程执行完以后,获得一个返回值的话,我们可以使用future这种方式。



我们发现线程池中并不会输出我们的队列的任务。

我们现在加上线程池的方法:

使用了这个方法就可以显示出我们的队列的任务了。






会启动<=cSize个线程 其它的任务就放到工作队列里。



那如果x-nworks>mSize呢?


会执行mSize个线程来执行任务,其余的执行相应的拒绝策略。

当然,我们也可以去自定义线程池拒绝策略:



我们可以在之前的demo中加上我们的自定义拒绝策略。

会输出我们自定义异常中的内容。
在实际工作中,我们可以在这里面做我们的日志打印或者邮件警告等内容。
Executor框架:


那这几种不同的创建线程池的方式有什么区别呢?
线程池的使用建议:


创建这样的一个类。
然后我们去给它设置最大的堆内存:

然后我们去运行它:

会报异常。

我们会在之前设置的路径中找到这个文件。

这里我们可以用我们这个工具来分析这个oom异常:


我们点击接受。



找到之前的文件。

我们可以看到我们的占用情况,这里我们就不详细介绍这个工具的使用了。

这样的一个代码我们也会产生内存溢出。

这样一段代码,我们的代码中存在异常。

用submit并没有给我们输出什么异常。
我们现在改用execute来运行:


就会给我们报出异常。

这种情况下submit也会给我们造成异常。



