Executors与ExecutorService的使用

 

线程池ExecutorService

 

接口 Executor    执行已提交的Runnable 任务的对象

只有唯一个方法:

 voidexecute(Runnable command) 
          在未来某个时间执行给定的命令。即调用了线程

 

Executors  创建线程池的方法类

 

介绍一下Executors的静态方法:

newFixedThreadPool 创建一个定长的线程池,每提交一个任务就会创建一个线程,直到最大长度,这时线程池会保持长度不能变化,如果有一个线程由于异常结束,线程池会补充一个新的。

newCachedThreadPool 创建一个可缓存的线程池,可以灵活回收空闲的线程,也可以灵活的添加,并不对池长度做任何限制。

newSingleThreadExecutor 创建一个单线程化的executor,确保只创建一个唯一的线程来执行任务,如果这个线程意外退出了,会有另外一个来取代它。保证任务队列FIFO、LIFO执行。

newScheduledThreadPool 创建一个定长的线程池,支持定时、周期性的任务执行,类似Timer。

 

ExecutorService(线程池)  继承了Executor

在线程池中执行任务比为每个任务分配一个线程优势更多。通过重用现有的线程而不是创建新线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销。

 线程池就是我一上来就产生好多个线程,它们就在里面歇着,等到要用时候那个线程有空用哪个。它是产生一组线程,那么我以后有任务时候,交给组,组内部再选择一个空闲的线程

 

注意:ExecutorService扩展了Executor并添加了一些生命周期管理的方法。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true,此时不能再往里面添加任务,不然会出错。

 

 

 

接口 ScheduledExecutorService

一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令
主要方法:

 

schedule(Callable<V> callable, long delay, TimeUnit unit) 
          创建并执行在给定延迟后启用的 ScheduledFuture。
schedule(Runnable command, long delay, TimeUnit unit) 
          创建并执行在给定延迟后启用的一次性操作。
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 
          创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。

scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) 
          创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。

练习代码:

 

import java.util.concurrent.*;

public class Demo {
      private static int i=50;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// TODO 自动生成的方法存根
		ExecutorService pool=Executors.newSingleThreadExecutor();
		pool.execute(new Runnable() {
			
			@Override
			public void run() {
				// TODO 自动生成的方法存根
	            for(int i=10;i<1;i++)
	            {
	            	System.out.println(i);
	            }
			}
		});
		try{
			ScheduledExecutorService timer =  Executors.newScheduledThreadPool(100);
			timer.scheduleAtFixedRate(new Runnable() {
			


			@Override
			public void run() {
				// TODO 自动生成的方法存根
				System.out.println("我是"+Demo.this.i--+"---------10秒后");
						
			}
		}, 
		0,
		10,
		TimeUnit.SECONDS);
	}catch(Exception r)
	{ System.out.println(r.getMessage());
	}
}
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值