`
max_annie
  • 浏览: 22259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一点一滴-线程池中ScheduledExecutorService定时器功能

 
阅读更多
使用线程池的好处:
    1.减少在创建和销毁线程上所花的时间以及系统资源的开销
    2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
    3.如果在web应用中使用线程,如timer,但是需要设置守护线程,这样在tomcat关闭时,线程也随之关闭。但有些线程不会随着tomcat的关闭而关闭。如:thread 。所以一般需要用线程池统一管理

项目应用的例子
1.线程池执行timer定时任务
         ScheduledExecutorService scheduled_pool = Executors.newScheduledThreadPool(1);
	Calendar currentDate = Calendar.getInstance();
	System.out.println(currentDate.getTime());
	long now =  currentDate.getTime().getTime();
	currentDate.add(Calendar.SECOND, 10);
	//Date date = calendar.getTime();
	long delay = currentDate.getTime().getTime()-now ;
	long interval = 10*1000;
	System.out.println(delay);
	scheduled_pool.scheduleAtFixedRate(new TestTimerRunable(), delay, interval,TimeUnit.MILLISECONDS);

线程池执行thread线程
ScheduledExecutorService scheduled_pool = Executors.newScheduledThreadPool(1);
Thread thread = new Thread(new Runnable() {
		@Override
		 public void run() {
		 // TODO Auto-generated method stub			
		}
		});
thread.setDaemon(true);//线程设置为守护线程 则容器关闭后,这些守护线程会立即关闭
scheduled_pool.execute(thread);

2.web应用
1)web.xml中配置监听器,在系统启动时加载线程池

  <listener-class>
	com.xxx.common.listener.ThreadPoolListener
  </listener-class>

2)监听器配置
public class ThreadPoolListener implements ServletContextListener{
         public static ScheduledExecutorService scheduled_pool = Executors.newScheduledThreadPool(10);
	private Logger log = LoggerFactory.getLogger(this.getClass());
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		scheduled_pool.shutdown();//关闭线程池 
		if (!scheduled_pool.isShutdown()) {
		   try {
			Thread.currentThread().wait(5000);
			if (!scheduled_pool.isShutdown()) {
				scheduled_pool.shutdownNow();//关闭线程池 (强行关闭)
			}
			} catch (InterruptedException e) {
				log.error("关闭所有线程错误",e.getMessage());
			} finally{
				if (!scheduled_pool.isShutdown()) {
				scheduled_pool.shutdownNow();
				}
			}
		}
		log.info("所有线程关闭"+scheduled_pool.isShutdown());
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		
	}

}





分享到:
评论
1 楼 haifengibei 2014-02-12  
请问线程池放在那里执行?

相关推荐

    自定义Java-ScheduledExecutorService定时器.jar

    这是一个jar,很秀。自定义的一个Java定时器工具类。主要是结合Spring Boot一起使用,并在Spring Boot启动的时候一起启动运行。

    Java 定时器(Timer)及线程池里使用定时器实例代码

    而线程池中的定时器,通常指的是`ScheduledExecutorService`,它是Java并发包`java.util.concurrent`中的一个接口,提供了更强大、更灵活的定时任务管理能力。 ### Java Timer 定时器 Java `Timer` 类主要用于创建...

    WEB-INF.rar_定时器

    Java中常见的定时器有`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`。前者适用于简单的定时任务,而后者则提供更高级的功能,如延迟执行、周期执行以及线程池管理。定时器常用于执行后台任务...

    android-fixedtimes-ScheduledExecutorService:具有指定执行时间的ScheduledExecutorService

    您可以在工作线程上运行任务(Runnable或Callable),以指定执行计划(如ScheduledExecutorService),并指定执行时间。 介面 ScheduledFuture&lt;?&gt; schedule( Runnable command, int executeTime, long delay,...

    java线程池

    Java标准库中的`java.util.concurrent`包提供了强大的线程池功能支持,主要由`ExecutorService`接口及其实现类`ThreadPoolExecutor`和`Executors`工具类提供。 #### 二、Java线程池的三种类型 根据不同的应用场景...

    servlet定时器功能完整版已测试过

    本项目中的"Servlet定时器功能完整版已测试过"是一个Java Web应用,利用Servlet实现了定时器功能。这通常涉及到计划执行的任务,例如数据备份、日志清理或者定期发送通知等。 首先,我们要理解Servlet容器如Tomcat...

    serial-executor-service:ScheduledExecutorService 的测试实用程序实现

    ScheduledExecutorService 的测试实用程序实现 允许测试如下代码: class Foo { private int count = 0; public Foo(ScheduledExecutorService service, Bar bar) { service.scheduleAtFixedRate(new Runnable...

    深入理解高并发编程-Java线程池核心技术

    线程池中的重要顶层接口和抽象类,如ExecutorService、AbstractExecutorService和ScheduledExecutorService,提供了基础的线程池服务和调度功能。这些接口和抽象类为开发者构建和定制线程池提供了灵活性,可以根据...

    定时器定时器

    标题"定时器定时器"可能是指讨论不同类型的定时器及其功能,而描述中的"多种触发方式,代码简洁易控制"则暗示我们将深入探讨定时器的不同触发机制以及其在编程中的简便性。 定时器的基本概念是设置一个时间间隔,当...

    徒手实现线程池-1

    在Java并发编程中,线程池(ThreadPoolExecutor)是一个至关重要的工具,它的目的是简化多线程的管理和控制,提高系统的效率和资源利用率。线程池的实现涉及到多种类型的队列和策略,每种都有其特定的适用场景。下面...

    java 线程池常用方法

    Java线程池是Java并发编程中的重要组成部分,它在Java 5及后续版本中引入,大大简化了线程管理和资源调度。线程池通过`Executor`接口和`ExecutorService`接口提供了一套强大的机制,允许开发者高效地创建、管理和...

    java 定时器

    在实际应用中,Java 5引入的`java.util.concurrent`包下的`ScheduledExecutorService`提供了更强大且灵活的定时任务管理功能,例如支持定时器线程池,可以更精确地控制任务执行和取消,以及更好的线程管理和异常处理...

    定时器源码

    在IT领域,定时器是一种非常重要的工具,广泛应用于各种软件系统中,如任务调度、事件触发、延时操作等。本资源提供了定时器的源码,对于开发者来说,这是一个宝贵的自学和研究材料。下面,我们将深入探讨定时器的...

    java 数字定时器

    通过以上介绍,我们了解了Java中实现数字定时器的基本方法,无论是使用 `java.util.Timer` 还是结合 `java.time.Duration` 和 `ScheduledExecutorService`,都可以根据实际需求选择合适的方案。在开发过程中,合理...

    JAVA中定时器的使用

    JAVA 中提供了多种方式来实现定时器,包括使用 Timer 和 TimerTask 类,使用 ScheduledExecutorService 等。 在 JAVA 中,Timer 和 TimerTask 是两个基本的类,用于实现定时器。Timer 类用于创建一个新的定时器,而...

    Java线程池.docx

    Java线程池功能可以实现线程的复用,提高了系统的性能和效率。 Java线程池分类 Java线程池可以分为四种类型:newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool和newScheduledThreadPool。 1. ...

    Java四种线程池的简单介绍.docx

    - 当线程池中的线程数量超过实际所需时,该线程池可以回收空闲的线程。 - 如果没有足够的可回收线程来处理新的任务,则会创建新的线程。 - 这种类型的线程池非常适合处理大量的短期异步任务。 - **示例代码**: ...

    spring定时器 spring定时器

    Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性任务的执行。这个功能基于Java的`java.util.concurrent.ScheduledExecutorService`,并通过Spring...

    java定时器(定时任务)

    - `Timer` 类是Java标准库中的一个老版本定时器,主要提供一次性或周期性的任务调度功能。 - 创建一个 `Timer` 对象后,你可以通过 `schedule(TimerTask task, long delay)` 或 `schedule(TimerTask task, Date ...

Global site tag (gtag.js) - Google Analytics