`
luccs624061082
  • 浏览: 82582 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
  大多数Executor的实现使用线程池,是由工作线程组成。这种线程与它执行的Runnable和回调函数分开,即单独存在,通常用来执行多任务。

  使用工作线程由于线程创建减少了开销。线程对象使用大量的内存,并且在大规模应用程序中,分配和取消分配许多线程对象产生了显著的内存管理开销。

  一个普通类型的线程池是大小固定的线程池。这类池有一个指定数量的线程运行。如果一个线程在它仍旧使用的时候不知怎么终止了,一个新的线程将自动替代它。任务通过一个内部队列提交给池,每当活动任务比线程多的时候,池将持有额外的任务。

  固定大小线程池的重要优点是应用程序使用它完美降低(degrade gracefully)。为了理解这个,考虑一个web 服务器应用,此应用中每个HTTP请求被一个单独的线程处理。如果这个应用程序为每个新的HTTP请求创建了一个新的线程,系统就将立即接受更多的请求比它处理的,应用程序将立即停止对所有请求的响应,当所有那些线程的开支超过了系统的容量的时候。对能被创建的线程的数量设置一个限制,虽然应用将不会跟它们一样快的服务这些HTTP请求,但是它将尽快的以系统能够承受的服务HTTP请求。

  创建一个执行器的简单方式是用一个固定大小的线程池,调用java.util.concurrent.Executors 的newFixedThreadPool 工厂方法。这个类也提供了如下的工厂方法:
 
1 newCachedThreadPool方法创建了一个可扩展的线程池。这个线程池适用于启动许多短暂任务的应用。

2 newSingleThreadExecutor方法创建了一个线程池,一次执行一个单一任务。
 
3 几个工厂方法是上面执行器的ScheduledExecutorService版本。

  如果通过上述工厂方法提供不了满足你的需求的执行器,构造java.util.concurrent.ThreadPoolExecutor 或者 java.util.concurrent.ScheduledThreadPoolExecutor 的实例将给你额外的选择。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics