黑马程序员技术交流社区

标题: Executors工具类中的创建的线程与直接new线程有什么区别 [打印本页]

作者: 林德燚    时间: 2012-4-26 01:41
标题: Executors工具类中的创建的线程与直接new线程有什么区别
Executors工具类中的创建的线程与直接new线程有什么区别?
今天看张老师的视频,对Executor不是很理解,
Executor执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start();
怎么理解?

作者: 徐鑫    时间: 2012-4-26 09:09
Executors线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。如果用new Thread的形式,会有性能开销,不方便处理。
作者: liqian    时间: 2012-4-26 09:22
new Thread的形式如果你有许多需要长时间运行的任务同时执行,并需要等所有的这些线程都执行完毕,还想得到一个返回值,操作起来有点困难,但是用Executors一个简单的类可以让你创建线程池和线程工厂。
通过 Executors 类来创建的线程池的类型:
• Single Thread Executor : 只有一个线程的线程池,因此所有提交的任务是顺序执行,代码: Executors.newSingleThreadExecutor()
• Cached Thread Pool : 线程池里有很多线程需要同时执行,老的可用线程将被新的任务触发重新执行,如果线程超过60秒内没执行,那么将被终止并从池中删除,代码:Executors.newCachedThreadPool()
• Fixed Thread Pool : 拥有固定线程数的线程池,如果没有任务执行,那么线程会一直等待,代码: Executors.newFixedThreadPool()
• Scheduled Thread Pool : 用来调度即将执行的任务的线程池,代码:Executors.newScheduledThreadPool()
• Single Thread Scheduled Pool : 只有一个线程,用来调度执行将来的任务,代码:Executors.newSingleThreadScheduledExecutor()
一旦你创建了一个线程池,你就可以往池中通过不同的方法提交执行任务,可提交 Runnable 或者 Callable 到线程池中,该方法返回一个 Future 实例表示任务的状态,如果你提交一个 Runnable ,那么如果任务完成后 Future 对象返回 null。
作者: 林德燚    时间: 2012-4-26 18:22
徐鑫 发表于 2012-4-26 09:09
Executors线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线 ...

谢谢                                                     
作者: 林德燚    时间: 2012-4-26 18:23
liqian 发表于 2012-4-26 09:22
new Thread的形式如果你有许多需要长时间运行的任务同时执行,并需要等所有的这些线程都执行完毕,还想得到 ...

谢谢                                                                  




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