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

【java多线程与并发库】--- 定时器的应用

 
阅读更多

定时器的应用

1、 定时器主要涉及到两个类(java.util包中)

@-》public class Timer extends Object

(一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 )

@-->public abstract class TimerTask extends Object implements Runnable
(由 Timer 安排为一次执行或重复执行的任务。)
2、Timer类的构造方法:
 

构造方法摘要

Timer()
创建一个新计时器。

Timer(booleanisDaemon)
创建一个新计时器,可以指定其相关的线程作为守护程序运行。

Timer(Stringname)
创建一个新计时器,其相关的线程具有指定的名称。

Timer(Stringname, booleanisDaemon)
创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。

计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。

默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。

此类 提供实时保证:它使用 Object.wait(long) 方法来安排任务。

实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。

实现注意事项:所有构造方法都启动计时器线程。

方法摘要

void

cancel()
终止此计时器,丢弃所有当前已安排的任务。

int

purge()
从此计时器的任务队列中移除所有已取消的任务。

void

schedule(TimerTasktask, Datetime)
安排在指定的时间执行指定的任务。

void

schedule(TimerTasktask, DatefirstTime, longperiod)
安排指定的任务在指定的时间开始进行重复的固定延迟执行

void

schedule(TimerTasktask, longdelay)
安排在指定延迟后执行指定的任务。

void

schedule(TimerTasktask, longdelay, longperiod)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行

void

scheduleAtFixedRate(TimerTasktask, DatefirstTime, longperiod)
安排指定的任务在指定的时间开始进行重复的固定速率执行

void

scheduleAtFixedRate(TimerTasktask, longdelay, longperiod)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行

3、TimerTask类的构造方法:

构造方法摘要

protected

TimerTask()
创建一个新的计时器任务。

方法摘要

boolean

cancel()
取消此计时器任务。

abstract void

run()
此计时器任务要执行的操作。

long

scheduledExecutionTime()
返回此任务最近实际 执行的已安排 执行时间。

实例1:
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


public class TimerTest {

	/**
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//每隔10s打印"hello,honey!";
		new Timer().schedule(new TimerTask(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("hello,honey!");
			}
			
		}, 10000);
		while(true){
			System.out.println(new Date().getSeconds());//打印当前秒数
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

实例2:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
 
 
public class TimerTest {
 
        /**
         * @param args
         */
 
        public static void main(String[] args) {
               // TODO Auto-generated method stub
               //每隔10s打印"hello,honey!";
               new Timer().schedule(new TimerTask(){
 
                       @Override
                       public void run() {
                               // TODO Auto-generated method stub
                               System.out.println("hello,honey!");
                       }
                       
               }, 10000,3000);//10s后打印,以后每隔3s打印一次
               /*while(true){
                       System.out.println(new Date().getSeconds());//打印当前秒数
                       try {
                               Thread.sleep(1000);
                       } catch (InterruptedException e) {
                               // TODO Auto-generated catch block
                               e.printStackTrace();
                       }
               }*/
        }
 
}


运行结果:



  


  
分享到:
评论

相关推荐

    Java多线程与并发库高级应用视频教程22集

    资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...

    java多线程和定时器学习

    Java多线程与定时器是Java编程中两个重要的概念,它们在构建高性能、高并发的应用程序中发挥着关键作用。本文将深入探讨这两个主题,并结合实际的代码示例进行讲解。 首先,我们来理解Java多线程。多线程允许一个...

    java多线程进度条

    本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...

    java多线程应用实现示例

    总结,这个"java多线程应用实现示例"通过小球运动的模拟,深入浅出地展示了Java多线程的运用,包括线程创建、同步、通信和线程池管理等关键概念。学习这个示例有助于理解和掌握Java多线程编程,为实际项目开发中的...

    java多线程迷宫生成程序

    总之,这个"java多线程迷宫生成程序"是一个很好的学习资源,它将多线程、图形渲染和算法应用巧妙地结合在一起,为开发者提供了一个实战练习平台,有助于提升对并发编程和动态图形生成的理解。通过深入研究源代码,你...

    java定时器\多线程(池)\java队列Demo

    Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,其中`java定时器`、`多线程(池)`和`java队列`是核心概念。让我们深入探讨这些主题。 ### 1. Java定时器(java.util.Timer) `java.util.Timer` 类允许...

    JAVA多线程编程详解-详细操作例子

    在 Java 中,多线程编程是一种强大的工具,它允许多个任务在同一个程序中并发执行,从而提高应用程序的效率和响应性。Java 为多线程编程提供了丰富的支持,包括两种主要的实现方式:继承 `Thread` 类和实现 `...

    java 游戏源码-----模拟钢琴

    总之,"Java 游戏源码-----模拟钢琴"是一个综合性的项目,涵盖了Java图形用户界面设计、音频处理、事件监听和多线程等多个重要知识点。通过研究这个源码,不仅可以提升你的Java编程技能,还能加深对游戏开发流程的...

    xintiao.rar_多线程 定时器

    总之,“xintiao.rar_多线程 定时器”项目中涉及的技术包括利用多线程进行并发处理,实现心跳报文的发送与接收,以及通过定时器来定期触发心跳报文的发送。这些技术在构建可靠、高效的网络通信系统中起着至关重要的...

    java 多线程编程 月食效果

    1. **Java多线程**:Java通过`Thread`类和`Runnable`接口提供了对多线程的支持。在这个项目中,可能有两个线程分别控制两个圆形——代表月亮和地球,这两个线程并行运行,以实现同时移动和交互的效果。使用`start()`...

    java定时器+多线程(池)+java队列Demo

    在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java.util.Timer)**:`Timer`类用于调度周期性的任务执行。它可以安排一个任务在未来某个时间点或定期...

    JAVA多线程编程详解-详细操作例子.doc

    创建,但尚未启动,即还没有调用 `start()` 方法。 2、可运行状态:线程调用了 `start()` 方法,等待 JVM 分配 CPU 时间...通过合理运用多线程技术,可以提升程序的并发性能,优化资源利用,使应用程序更加健壮和高效。

    Java多线程赛马游戏

    【Java多线程赛马游戏】是一个通过Java编程语言实现的互动小游戏,它巧妙地结合了多线程技术和Swing图形用户界面库。这个项目旨在展示如何在Java中创建并发执行的任务,模拟赛马比赛的过程,并提供用户友好的图形...

    java多线程编程_java多线程_

    1.讲解了Java多线程的基础, 包括Thread类的核心API的使用。2.讲解了在多线程中对并发访问的控制, 主要就是synchronized的使用, 由于此关键字在使用上非常灵活, 所以书中用了很多案例来介绍此关键字的使用, 为...

    Java编写线程动画

    Java编程中的线程动画是一种利用多线程技术在图形用户界面(GUI)上实现动态效果的方法。线程是操作系统分配CPU时间的基本单元,Java通过提供...同时,不断学习和实践将帮助你更好地理解和掌握Java多线程编程的精髓。

    JAVA并发编程实践-线程执行-学习笔记

    总的来说,Java并发编程实践中的任务执行是一个涉及线程调度、线程池管理、任务生命周期控制、结果处理等多个方面的复杂主题。理解和掌握这些概念和技术,能够帮助开发者编写出更加高效、可靠的并发程序。

    java弹球小游戏,多线程

    下面将详细探讨Java多线程在弹球游戏中如何应用以及相关知识点。 首先,我们要理解Java中的线程。线程是程序执行的最小单位,一个进程可以有多个线程。在Java中,可以通过继承Thread类或实现Runnable接口来创建线程...

    2020老杜最新Java零基础进阶视频教程-多线程课件

    【Java多线程详解】 Java多线程是Java编程中...总之,Java多线程提供了强大的并发能力,通过理解并掌握线程的基本概念、创建、调度、控制以及同步,开发者可以编写出高效、安全的多线程程序,适应现代计算环境的需求。

    java多线程模拟时钟显示

    在这个特定的项目“java多线程模拟时钟显示”中,开发者利用Java的多线程技术来创建一个模拟传统时钟的程序,时钟会实时地显示时针、分针和秒针的位置。下面我们将深入探讨如何实现这样的功能以及涉及的关键知识点。...

    JAVA打飞机游戏设计与实现-多线程

    总的来说,这个"JAVA打飞机游戏设计与实现-多线程"项目不仅涵盖了Java的基础语法和面向对象编程,还深度探讨了Java的多线程编程技巧,是学习和实践Java并发处理的一个优秀实例。通过分析和理解源代码,开发者能够...

Global site tag (gtag.js) - Google Analytics