자바 정규 작업 --Timer와 TimerTask를

1. 프로그램 및 프로그래밍

우리는 컴퓨터 프로그램에 사람들이 특정 요구 사항을 충족하는 인식하고 명령을 실행, 컴퓨터, 정보 기술 도구를 실행할 수있는 컴퓨터의 집합입니다 것을 알고있다.

쇼트 프로그램에서, 본질적으로, 지침의 집합이며, 프로그래밍은 말 그대로 말하기, 프로그램에 의한 특정 동작을 완료하기 위해, 명령 (프로그램)의 집합을 작성하는 것입니다.

매일 프로그래밍에서, 우리는 불가피하게하는 방법을 지정된 시간에 특정 일을하는 그런 상황을 발생합니다 (예를 들어 알람이 울리지하기 위해)? 일반적으로 달성하기 위해 자바에서 작업을 시간 초과, 다음은 자바의 타이밍 소스 코드 분석 작업과 결합됩니다.

시작 스크립트 2.

 위의 시간과 스레드에 대한 작품이다. 물론, 결국 보의 사람들이 미소를위한 조각, 우리가 얻을 수있는 더 좋은 방법을 개발하는 시간이있을 것이다. 여기에 우리가 하루에있는 경우 다음에 어떤 행동을 할 수 있다는 것입니다 (예 : 위의 같은 알람 소리를했다)

이 스레드는 (우리가 일반적으로 예약 된 작업을 사용하는 경향이 방법을 사용하지 않는 것이 좋습니다 있지만) 잘 할 수있는 쉬운 방법입니다.

3.Java 일반 작업

 간단히 타이머는 두 가지 핵심 구성 요소가 있습니다 넣어 :

  • TimerThread 스레드에 대한 시간의 제어에 TimerTask를 실행 작업 대기열;
  • 작업 대기열은 유틸리티 클래스, 배열 관리의 TimerTask입니다

타이머 노출 방법은 주로 접촉 타이머와 TimerTask를을 설정하는 일정의 연속이다. 우리는 디자인의 매우 중요한 부분에서 자바 정규 작업을 작업 및 타이머의 분리입니다 참조하십시오.

위의 간단한 예입니다하는 예약 작업 포인트를 사용할 때하는 것은주의해야 :

  • 복수의 TimerTask 타이머가 수행 될 수 있지만 TimerTask를 단지 타이머 (TimerTask를, 서로 다른 상태에 의해 결정의 TimerTask 수명주기 ()와 관련이 상태를 일정 체크섬)을 사용.
  • 일반적으로, 서브 클래스 TimerTask를 추상 클래스를 생성 별도의 서브 클래스 TimerTask를 확장 만드는 고려하는 익명 클래스를 사용하지 마십시오.
  • 실제 일정은 다른 방법 또는 방법 scheduleAtFixedRate 작업이 필요합니다.
  • 합리적인 사용 취소 및 정화 방법.

4. 소스 분석

세 번째 부분의 간단한 예 바인딩 소스를 정렬한다.

① 타이머와 TimerTask를 만들기

Timer的核心构造方法,调用此方法时启动,初始化创建的TimerThread线程。

 

 ②执行schedule或scheduleAtFixedRate方法

 其中核心的sched方法,主要是判断线程的状态,TimerTask的状态,然后将通过校验的TimerTask添加到TaskQueue,其后交由TimerThread管理。

③TimerThread原理

时间线程TimerThread中run方法执行的mianLoop方法如上,会一直循环执行。

a.获取TaskQueue中的第一个序列的TimerTask(通过getMin()方法获取),这里很重要,每次循环后TaskQueue序列可能会变化。

b.然后校验TimerTask的状态,移除TaskQueue不需要执行的TimerTask

c.对于能够执行的TimerTask,校验当前时间和执行时间, 通过taskFired标识(表示TimerTask是否就绪,可以执行),(然后处理只执行一次的,从TaskQueue中移除,按频率执行多次的重新排序,详见rescheduleMin方法)。

d.未就绪的TimerTask将wait,而就绪(状态正常且到执行时间的TimerTask)的执行TimerTask的run方法。此时该Timer中的TimerTask执行完毕,后续的就是TimerTask线程逻辑。

④TaskQueue和TimerTask

结合源码可以了解TaskQueue如何排序,以及TimerTask中不同的状态(生命周期)的意义。

4.总结

Java原生的定时任务包括Timer和TimerTask两部分,Timer为主,TimerTask为辅。

Timer中由TimerThread线程控制TimerTask是否执行,Java通过这两个类完成了定时任务的基本功能。

学习时不只是要学习其源码中内部实现,工作原理。更要关注Timer和TimerTask分离的思想,这很重要。

后续学习Java中其他的定时任务,如Spring的定时任务,Quartz。

추천

출처www.cnblogs.com/masting/p/11627964.html