黑马程序员技术交流社区

标题: 关于Executors与定时器 [打印本页]

作者: 刘焕新    时间: 2013-4-2 17:10
标题: 关于Executors与定时器
本帖最后由 刘焕新 于 2013-4-6 15:56 编辑

视频学习到后两个应用案例,对于用例中提及到的Executors和定时器很陌生,不知如何下手去学习和理解,只知道这个跟多线程有关。所以,请同学们帮忙理一下这个知识体系,或者给些示例程序,谢谢!


作者: 罗玉宁    时间: 2013-4-8 08:11
Executors工厂类用来产生连接池,该工厂类里包含几个静态工厂方法创建连接池:
newCachedThreadPool();创建一个具有缓存功能的线程池,系统根据需要创建线程,
这些线程将会被缓存在线程池中。
newFixedThreadPool(int n);创建一个可重用的具有固定线程数的线程池。
newSingleThreadExecutor();创建一个只有单线程的线程池,相当于
newFixedThreadPool(1);
newScheduledThreadPool(int n);创建具有指定线程数的线程池,它可以
在指定延迟后执行线程任务,。
newSingleThreadScheduledExecutor();创建一个只有一条线程的线程池,
它可以在指定延迟后执行线程任务。
上面五个方法中前三个方法返回一个ExecutorService对象,该对象代表一个线程池,
它可以执行Runnable对象或Callable对象所代表的线程,而后两个方法返回一个
ScheduledExecutorService线程池,它是ExecutorService的子类
它可以在指定延迟后执行线程任务。

ExecutorService里面提供了如下三个方法:
submit(Runnable t):将一个Runnable对象提交给指定的线程池。线程池将在有空闲线程时执行
Runnable对象代表的任务。
submit(Runnable t,T r);将一个Runnable对象交给指定的线程池。
线程池将在有空闲线程时执行Runnable对象所代表的任务,r显式
指定线程执行结束后的返回值。
submit(Callable t);将一个Callable对象交给指定的线程池。线程池将在有空闲线程时执行Callable对象所代表的任务

ScheduledExecutorService代表可在指定延迟或周期行执行
线程任务的线程池。它提供几个方法如下:
schedule(Callable c,long delay,TimeUnit u);
指定c任务将在delay延迟后执行。u是时间的单位。
schedule(Runnable r,long delay,TimeUnit u);
指定r任务将在delay延迟后执行。
scheduleAtFixedRate(Runnable r,long initialDelay ,long period,TimeUnit u);
r任务将在delay延迟后执行,而且以设定频率重复执行。也就是说。在initialDelay后
开始执行,依次在initialDelay+period、initialDelay+2*period...处重复执行。
scheduleWithFixedDelay(Runnable r,long initialDelay ,long period,TimeUnit u);
创建并执行一个在给定初始延迟后首次启用的定期操作。如果任务的任一次执行时
遇到异常,就会取消后续的执行。否则只能通过程序显式取消或终止该任务。
其他的你可以看看API学习。

作者: 刘焕新    时间: 2013-4-8 13:14
罗玉宁 发表于 2013-4-8 08:11
Executors工厂类用来产生连接池,该工厂类里包含几个静态工厂方法创建连接池:
newCachedThreadPool();创建 ...

嗯,非常感谢!这样的整理,我觉得比API好理解多了。API虽说也有解释,但看起来要费劲一些。
至少到目前为止我知道了Executors及其子类是用来创建和运行线程的,可以创建单个或多个线程,还可以创建延迟运行的线程,或定时周期运行的线程,还可以拿到线程的返回值了。
我自己在尝试写些相关Test程序,来验证我对此类及方法的理解,以便在以后的运用时就能想到并且运用上了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2