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

 

 

 

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

 

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

 

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

我们现在使用一下我们的callable:

 

 

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

 

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

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

 

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

 

 

 

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

 那如果x-nworks>mSize呢?

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

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

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

会输出我们自定义异常中的内容。

在实际工作中,我们可以在这里面做我们的日志打印或者邮件警告等内容。

 Executor框架:

 

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

 线程池的使用建议:

 

创建这样的一个类。

然后我们去给它设置最大的堆内存:

 

 然后我们去运行它:

会报异常。

 

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

 

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

 我们点击接受。

 

 

找到之前的文件。

 

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

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

 

 

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

 

用submit并没有给我们输出什么异常。

我们现在改用execute来运行:

 

 

就会给我们报出异常。

 

 

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

 

猜你喜欢

转载自blog.csdn.net/weixin_52618349/article/details/130211410