java 在线程执行器中执行任务并且返回结果

是什么?为什么?怎么做?

 

一、是什么

记得之前写过future获取异步线程执行结果:

java future获取线程异步执行的结果

上次是直接使用线程执行带返回结果的线程。这次我们尝试交给线程执行器执行。

二、为什么

原因同:

java ThreadPoolExecutor创建线程执行器

三、怎么做

1.简单例子

大致流程就是这样,代替了直接操作线程的方式。

这里创建了一个只有两条线程大小的线程池,但是现在存在三个任务,就如何执行?

我的理解:

线程池只能同时分配两条线程,所以先来先得,优先执行前两个任务。当某一个任务执行完毕,线程回到线程池中,就会被分配去执行第三个任务。

运行结果也证明了这一点:

2.复杂一点的例子

使用上次的情景:

老师让三个学生做一道题,每隔一段时间看看学生做完没有,如果学生没做完,就提醒一下做题方法,如果学生做完了,就拿给老师检查。

比较需要注意的是这里:

移除元素后需要i–,否则会报出java.util.ConcurrentModificationException异常。

运行结果:

四、总结

要体会线程执行器的思想。

发表评论

电子邮件地址不会被公开。 必填项已用*标注