线程池Executors探究

线程池用到的类在java.util.concurrent包下,核心类是Executors,通过其不同的几个方法可产生不同的线程池。

1.生成固定大小的线程池

public static ExecutorService newFixedThreadPool(int nThreads) 

然后用ExecutorService对象的submit()方法来执行线程任务。

    Future<?> submit(Runnable task);
<T> Future<T> submit(Runnable task, T result);
<T> Future<T> submit(Callable<T> task);
submit()方法有3个重载:

    如果传入的参数是一个Runnable实例,则线程池将会在有空闲线程的时候执行此Runnable对象代表的任务(执行run()方法),Future对象代表run()方法的返回值,因为run()方法没有返回值,所以此时Future对象是null。

    如果传入的参数是一个Runnable实例和某个类型的对象,则线程池将会在有空闲线程的时候执行此Runnable对象代表的任务(执行run()方法),Future对象

如果线程任务数大于线程池大小的话,则多出来的线程任务就得等其他线程任务执行完后再执行。

2.生成可变尺寸的线程池

public static ExecutorService newCachedThreadPool() 
这种线程池可根据需要进行自动扩容,最大尺寸是Integer.MAX_VALUE。

3.生成延迟线程池

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) 
这种线程池对象有三种常用的方法:

a.从父接口ExecutorService的父接口Executor继承的void execute(Runnable command)方法,用法跟上面一样。

b.ScheduledExecutorService  接口自己的ScheduledFuture<?> schedule(Runnable command,  long delay, TimeUnit unit)方法,需要传3个参数。第一个参数传Runnable实例,第二个参数传延迟的时间量,第三个参数传延迟时间的单位,是枚举TimeUnit的一个元素。

c.ScheduledExecutorService  接口自己的ScheduledFuture<?> scheduleAtFixedRate(Runnable command,  long initialDelay,  long period, TimeUnit unit)方法,需要传4个参数。第一个参数传Runnable实例,第二个参数传延迟的时间量,第三个参数传间隔时间,第四个参数传时间单位,同样是枚举TimeUnit的一个元素。从传的参数可以看出,这个方法可以用来做定时任务。例如,如果想5s执行一次某项任务,只需要把该项任务写在Runnable实现类的run方法体中,然后利用Executors创建一个延迟线程池,调用scheduleAtFixedRate(Runnable command,  long initialDelay,  long period,TimeUnit unit)方法即可,其中第三个参数传5,第四个参数传TimeUnit.SECONDS即可。

参考文章:

http://blog.csdn.net/coding_or_coded/article/details/6856014

http://blog.sina.com.cn/s/blog_a5f093b401015nkr.html

http://www.trinea.cn/android/java-android-thread-pool/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值