For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
线程池技术的应用在许多软件编程开发项目中都是经常会用到的一个编程开发技术,而今天我们就通过案例分析来简单了解一下,线程池的创建方法分享。
1、创建单一线程的线程池
任何时候线程池中至多只有一个线程,当线程执行异常终止时会自动创建一个新线程替换。如果既有异步执行任务的需求又希望任务得以顺序执行,那么此类型线程池是选。
若多个任务被提交到此线程池,那么会被缓存到队列。当线程空闲的时候,按照FIFO的方式进行处理。
2、创建固定数量的线程池
创建核心线程与大线程数相等的固定线程数的线程池,任何时刻至多有固定数目的线程,当线程因异常而终止时则会自动创建线程替换。
当有新任务加入时,如果池内线程均处于活跃状态,则任务进入等待队列中,直到有空闲线程,队列中的任务才会被顺序执行;如果池内有非活跃线程,则任务可以立刻得以执行。
如果线程的数量未达到指定数量,则创建线程来执行任务
如果线程池的数量达到了指定数量,并且有线程是空闲的,则取出空闲线程执行任务
如果没有线程是空闲的,则将任务缓存到队列(队列长度为Integer.MAX_VALUE)。当线程空闲的时候,按照FIFO的方式进行处理
3、创建可伸缩的线程池
这种方式创建的线程池,核心线程池的长度为0,线程池大长度为Integer.MAX_VALUE。由于本身使用SynchronousQueue作为等待队列的缘故,导致往队列里面每插入一个元素,必须等待另一个线程从这个队列删除一个元素。
线程池可维护0到Integer.MAX_VALUE个线程资源,空闲线程默认情况下超过60秒未使用则会被销毁,长期闲置的池占用较少的资源。
当有新任务加入时,如果池中有空闲且尚未销毁的线程,则将任务交给此线程执行;如果没有可用的线程,则创建一个新线程执行任务并添加到池中。
4、创建定时调度的线程池
和上面3个工厂方法返回的线程池类型有所不同,它返回的是ScheduledThreadPoolExecutor类型的线程池。平时我们实现定时调度功能的时候,可能更多的是使用三方类库,比如:quartz等。但是对于更底层的功能,我们仍然需要了解。