常见线程池和启动定时器线程池-笔记整理7


常见线程池和启动定时器线程池


1.线程池的概念:线程池是一种多线程处理形式,处理过程中将任务添加到队列,如果线程池中有空闲的线程,则由该线程去完成这些任务。

2.Excecutors类的应用

  (1)创建固定大小的线程池Executors.newFixedThreadPool(3); 

  (2)创建缓存线程池Executors.newCachedThreadPool(3)

当任务扔进线程池中如果当前创建的线程不够来处理任务的话,就自动添加跟任务数量相等的线程。

  (3)创建单一线程池:Executors.newSingleThreadExecutor();

     跟创建单一线程并没有什么区别,但是它有一个好处,就是当这个线程死了以后,就会自动再创建一个替补线程。

 

3.线程池结束线程的方法:shutdown();shutdownNow

   shutdown():

   shutdownNow():

 

4.用线程池启动定时器

  (1)调用ScheduleExecutorServiceschedule方法,返回的ScheduleFuture对象可以取消任务。

  (2)支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。

注意:scheduleAtFixedRate()这个方法里并没有传入Date这个参数的方法。


实例1:对三种常见线程池使用示例

public class ThreadPoolTest {
	public static void main(String[] args) {
		
		// TODO Auto-generated method stub
	  //ExecutorService threadpool= Executors.newFixedThreadPool(3);
		ExecutorService threadpool= Executors.newCachedThreadPool();
	  
		for(int i=1;i<=10;i++){
			  final int task = i;
			  threadpool.execute(
				   new Runnable(){
					   public void run(){
						    for(int j=1;j<=10;j++){
						    	try {
									Thread.sleep(100);
								} catch (InterruptedException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
						    	System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for  task of " + task);
						    }
					   }
				   }
				  );
		}
	}
}



实例2:对线程池指定的任务设置,延迟时间,和指定时间间隔
		Executors.newScheduledThreadPool(3).scheduleAtFixedRate((new Runnable() {
			@Override
			public void run() {
				System.out.println("bombing");
			}
		}), 10, 2,TimeUnit.SECONDS);






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值