<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDevelopment%2FTimer</id>
		<title>Java Tutorial/Development/Timer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDevelopment%2FTimer"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Development/Timer&amp;action=history"/>
		<updated>2026-04-21T22:51:46Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Development/Timer&amp;diff=3759&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Development/Timer&amp;diff=3759&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Development/Timer&amp;diff=3760&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Development/Timer&amp;diff=3760&amp;oldid=prev"/>
				<updated>2010-05-31T15:31:00Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Class encapsulating timer functionality ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2003 - 2007 OpenSubsystems s.r.o. Slovak Republic. All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Project: OpenSubsystems&lt;br /&gt;
 * &lt;br /&gt;
 * $Id: MyTimer.java,v 1.5 2007/01/07 06:14:00 bastafidli Exp $&lt;br /&gt;
 * &lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; version 2 of the License. &lt;br /&gt;
 * &lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Class encapsulating timer functionality.&lt;br /&gt;
 * &lt;br /&gt;
 * @version $Id: MyTimer.java,v 1.5 2007/01/07 06:14:00 bastafidli Exp $&lt;br /&gt;
 * @author Miro Halas&lt;br /&gt;
 * @code.reviewer Miro Halas&lt;br /&gt;
 * @code.reviewed Initial revision&lt;br /&gt;
 */&lt;br /&gt;
public class MyTimer&lt;br /&gt;
{&lt;br /&gt;
   // Attributes ///////////////////////////////////////////////////////////////&lt;br /&gt;
   &lt;br /&gt;
   /**&lt;br /&gt;
    * Remeber start time here.&lt;br /&gt;
    */&lt;br /&gt;
   private long m_lStartTime;&lt;br /&gt;
   &lt;br /&gt;
   /**&lt;br /&gt;
    * Remeber stop time here.&lt;br /&gt;
    */&lt;br /&gt;
   private long m_lStopTime;&lt;br /&gt;
   // Constructors /////////////////////////////////////////////////////////////&lt;br /&gt;
   &lt;br /&gt;
   /**&lt;br /&gt;
    * Default constructor.&lt;br /&gt;
    * Starts counting fro the moment it is cosntructed.&lt;br /&gt;
    */&lt;br /&gt;
   public MyTimer(&lt;br /&gt;
   )&lt;br /&gt;
   {&lt;br /&gt;
      reset();&lt;br /&gt;
   }&lt;br /&gt;
   // Logic ////////////////////////////////////////////////////////////////////&lt;br /&gt;
   &lt;br /&gt;
   /**&lt;br /&gt;
    * @return long - start time;&lt;br /&gt;
    */&lt;br /&gt;
   public long getStartTime()&lt;br /&gt;
   {&lt;br /&gt;
      return m_lStartTime;&lt;br /&gt;
   }&lt;br /&gt;
   /**&lt;br /&gt;
    * @return - stop time;&lt;br /&gt;
    */&lt;br /&gt;
   public long getStopTime()&lt;br /&gt;
   {&lt;br /&gt;
      return m_lStopTime;&lt;br /&gt;
   }&lt;br /&gt;
   /**&lt;br /&gt;
    * Reset the counter and start counting from scratch.&lt;br /&gt;
    */&lt;br /&gt;
   public void reset(&lt;br /&gt;
   )&lt;br /&gt;
   {&lt;br /&gt;
      m_lStartTime = System.currentTimeMillis();&lt;br /&gt;
      m_lStopTime = 0;&lt;br /&gt;
   }&lt;br /&gt;
   /**&lt;br /&gt;
    * Stop the timer.&lt;br /&gt;
    */&lt;br /&gt;
   public void stop(&lt;br /&gt;
   )&lt;br /&gt;
   {&lt;br /&gt;
      m_lStopTime = System.currentTimeMillis();&lt;br /&gt;
   }&lt;br /&gt;
   /**&lt;br /&gt;
    * Get timer duration (the timer doesn&amp;quot;t stop) in milliseconds.&lt;br /&gt;
    * &lt;br /&gt;
    * @return long - difference between stop and start time.&lt;br /&gt;
    */&lt;br /&gt;
   public long getDuration(&lt;br /&gt;
   )&lt;br /&gt;
   {&lt;br /&gt;
      long lStopTime;&lt;br /&gt;
      if (m_lStopTime == 0)&lt;br /&gt;
      {&lt;br /&gt;
         lStopTime = System.currentTimeMillis();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
         lStopTime = m_lStopTime;&lt;br /&gt;
      }&lt;br /&gt;
      return lStopTime - m_lStartTime;&lt;br /&gt;
   }&lt;br /&gt;
   /**&lt;br /&gt;
    * Print the state of the timer without stopping it.&lt;br /&gt;
    * @return String - timing information&lt;br /&gt;
    */&lt;br /&gt;
   public String toString(&lt;br /&gt;
   )&lt;br /&gt;
   {&lt;br /&gt;
      long lTotalMS   = getDuration();&lt;br /&gt;
      long lMS        = lTotalMS % 1000;&lt;br /&gt;
      long lTotalSecs = lTotalMS / 1000;&lt;br /&gt;
      long lSecs      = lTotalSecs % 60;&lt;br /&gt;
      long lTotalMins = lTotalSecs / 60;&lt;br /&gt;
      long lMinutes   = lTotalMins % 60;&lt;br /&gt;
      long lHours     = lTotalMins / 60;&lt;br /&gt;
      StringBuffer sbBuffer = new StringBuffer();&lt;br /&gt;
      if (lHours &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         sbBuffer.append(lHours);&lt;br /&gt;
         sbBuffer.append(&amp;quot;:&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lMinutes);&lt;br /&gt;
         sbBuffer.append(&amp;quot;:&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lSecs);&lt;br /&gt;
         sbBuffer.append(&amp;quot;.&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lMS);&lt;br /&gt;
      }&lt;br /&gt;
      else if (lMinutes &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         sbBuffer.append(lMinutes);&lt;br /&gt;
         sbBuffer.append(&amp;quot;:&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lSecs);&lt;br /&gt;
         sbBuffer.append(&amp;quot;.&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lMS);&lt;br /&gt;
      }&lt;br /&gt;
      else if (lSecs &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         sbBuffer.append(lSecs);&lt;br /&gt;
         sbBuffer.append(&amp;quot;.&amp;quot;);&lt;br /&gt;
         sbBuffer.append(lMS);&lt;br /&gt;
         sbBuffer.append(&amp;quot; seconds&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
         sbBuffer.append(lMS);&lt;br /&gt;
         sbBuffer.append(&amp;quot; ms&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      return sbBuffer.toString();&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Create a scheduled task using timer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.DateFormat;&lt;br /&gt;
import java.text.SimpleDateFormat;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
public class Main extends TimerTask {&lt;br /&gt;
  private DateFormat formatter = new SimpleDateFormat(&amp;quot;hh:mm:ss a&amp;quot;);&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TimerTask task = new Main();&lt;br /&gt;
    Timer timer = new Timer();&lt;br /&gt;
    timer.scheduleAtFixedRate(task, new Date(), 1000);&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(formatter.format(new Date()));&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Create a Timer object ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
public class Main {&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  public Main(int seconds) {&lt;br /&gt;
    timer = new Timer();&lt;br /&gt;
    timer.schedule(new ToDoTask(), seconds * 1000);&lt;br /&gt;
  }&lt;br /&gt;
  class ToDoTask extends TimerTask {&lt;br /&gt;
    public void run() {&lt;br /&gt;
      System.out.println(&amp;quot;working&amp;quot;);&lt;br /&gt;
      timer.cancel(); &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    new Main(5);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Demonstrate Timer and TimerTask. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
class MyTimerTask extends TimerTask {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(&amp;quot;Timer task executed.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class TTest {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    MyTimerTask myTask = new MyTimerTask();&lt;br /&gt;
    Timer myTimer = new Timer();&lt;br /&gt;
    myTimer.schedule(myTask, 1000, 500);&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(5000);&lt;br /&gt;
    } catch (InterruptedException exc) {&lt;br /&gt;
    }&lt;br /&gt;
    myTimer.cancel();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  extends TimerTask to create your own task ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.DataOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
class MyTask extends TimerTask {&lt;br /&gt;
  private DataOutputStream out;&lt;br /&gt;
  public MyTask(OutputStream dest) {&lt;br /&gt;
    out = new DataOutputStream(dest);&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      out.writeInt(1);&lt;br /&gt;
      out.writeUTF(&amp;quot;asdf&amp;quot;);&lt;br /&gt;
    } catch (IOException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Pause and start a timer task ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
class MyTask extends TimerTask {&lt;br /&gt;
  int counter;&lt;br /&gt;
  public MyTask() {&lt;br /&gt;
    counter = 0;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    counter++;&lt;br /&gt;
    System.out.println(&amp;quot;Ring &amp;quot; + counter);&lt;br /&gt;
  }&lt;br /&gt;
  public int getCount() {&lt;br /&gt;
    return counter;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  private boolean running;&lt;br /&gt;
  private MyTask task;&lt;br /&gt;
  private Timer timer;&lt;br /&gt;
  public Main() {&lt;br /&gt;
    timer = new Timer(true);&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isRinging() {&lt;br /&gt;
    return running;&lt;br /&gt;
  }&lt;br /&gt;
  public void startRinging() {&lt;br /&gt;
    running = true;&lt;br /&gt;
    task = new MyTask();&lt;br /&gt;
    timer.scheduleAtFixedRate(task, 0, 3000);&lt;br /&gt;
  }&lt;br /&gt;
  public void doIt() {&lt;br /&gt;
    running = false;&lt;br /&gt;
    System.out.println(task.getCount() + &amp;quot; times&amp;quot;);&lt;br /&gt;
    task.cancel();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Main phone = new Main();&lt;br /&gt;
    phone.startRinging();&lt;br /&gt;
    try {&lt;br /&gt;
      System.out.println(&amp;quot;started running...&amp;quot;);&lt;br /&gt;
      Thread.sleep(20000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
    }&lt;br /&gt;
    phone.doIt();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Schedule a task by using Timer and TimerTask. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
class AutoTask extends TimerTask {&lt;br /&gt;
  AutoTask() {&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(new Date());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    AutoTask myTask = new AutoTask();&lt;br /&gt;
    Timer bkTimer = new Timer();&lt;br /&gt;
    bkTimer.schedule(myTask, 2000, 2000);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(2100);&lt;br /&gt;
      } catch (InterruptedException exc) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    bkTimer.cancel();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Scheduling a Timer Task to Run Repeatedly ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    int delay = 5000; // delay for 5 sec.&lt;br /&gt;
    int period = 1000; // repeat every sec.&lt;br /&gt;
    Timer timer = new Timer();&lt;br /&gt;
    timer.scheduleAtFixedRate(new TimerTask() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        System.out.println(&amp;quot;doing&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
    }, delay, period);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Swing also provide a Timer class. A Timer object will send an ActionEvent to the registered ActionListener. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class Main implements ActionListener {&lt;br /&gt;
  Timer t = new Timer(1000, this);&lt;br /&gt;
  Main() {&lt;br /&gt;
    t.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    System.out.println(&amp;quot;working&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Main main = new Main();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Timer and TimerTask Classes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
class GCTask extends TimerTask {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(&amp;quot;Running the scheduled task...&amp;quot;);&lt;br /&gt;
    System.gc();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Timer timer = new Timer();&lt;br /&gt;
    GCTask task = new GCTask();&lt;br /&gt;
    timer.schedule(task, 5000, 5000);&lt;br /&gt;
    int counter = 1;&lt;br /&gt;
    while (true) {&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(500);&lt;br /&gt;
      } catch (InterruptedException e) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Using Timers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The java.util.Timer class provides an alternative way to perform scheduled or recurrent tasks.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Timer timer = new Timer();&lt;br /&gt;
    timer.schedule(new DisplayQuestionTask(), 0, 10 * 1000);&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(10000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer.cancel();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DisplayQuestionTask extends TimerTask {&lt;br /&gt;
  int counter = 0;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(counter++);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Your own timer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1998-2002 Carnegie Mellon University.  All rights&lt;br /&gt;
 * reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in&lt;br /&gt;
 *    the documentation and/or other materials provided with the&lt;br /&gt;
 *    distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS&amp;quot;&amp;quot; AND&lt;br /&gt;
 * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY&lt;br /&gt;
 * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,&lt;br /&gt;
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&lt;br /&gt;
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
public class Timer {&lt;br /&gt;
    int interval;&lt;br /&gt;
    boolean periodic;&lt;br /&gt;
    boolean isExpired = false;&lt;br /&gt;
    static TimerManager manager = new TimerManager ();&lt;br /&gt;
    long deadline;&lt;br /&gt;
    Timer next, prev;&lt;br /&gt;
    public Timer () {&lt;br /&gt;
    }&lt;br /&gt;
    public void set (int msecDelay, boolean periodic) {&lt;br /&gt;
        interval = msecDelay;&lt;br /&gt;
        this.periodic = periodic;&lt;br /&gt;
        isExpired = false;&lt;br /&gt;
        if (!manager.isAlive ()) {&lt;br /&gt;
            System.err.println (&amp;quot;TimerManager: restarting&amp;quot;);&lt;br /&gt;
            manager = new TimerManager ();&lt;br /&gt;
        }&lt;br /&gt;
        manager.register (this, System.currentTimeMillis () + msecDelay);&lt;br /&gt;
    }&lt;br /&gt;
    public int getInterval () {&lt;br /&gt;
        return interval;&lt;br /&gt;
    }&lt;br /&gt;
    public boolean getPeriodic () {&lt;br /&gt;
        return periodic;&lt;br /&gt;
    }&lt;br /&gt;
    public void cancel () {&lt;br /&gt;
        manager.delete (this);&lt;br /&gt;
    }&lt;br /&gt;
    protected void alarm () {&lt;br /&gt;
    }&lt;br /&gt;
    public boolean expired () {&lt;br /&gt;
        return isExpired;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    /*&lt;br /&gt;
    public static void main (String[] args) {&lt;br /&gt;
        for (int i=0; i&amp;lt;args.length; ++i) {&lt;br /&gt;
            boolean periodic = (args[i].charAt (0) == &amp;quot;p&amp;quot;);&lt;br /&gt;
            if (periodic) args[i] = args[i].substring (1);&lt;br /&gt;
            new TestTimer (args[i], Integer.parseInt (args[i]), periodic);&lt;br /&gt;
        }&lt;br /&gt;
        while (true) Thread.yield ();&lt;br /&gt;
    }&lt;br /&gt;
    */&lt;br /&gt;
}&lt;br /&gt;
class TimerManager extends Thread {&lt;br /&gt;
    Timer first, last;&lt;br /&gt;
    /*&lt;br /&gt;
    static ThreadGroup rootThreadGroup;&lt;br /&gt;
    static {&lt;br /&gt;
        rootThreadGroup = Thread.currentThread().getThreadGroup();&lt;br /&gt;
        while (rootThreadGroup.getParent() != null)&lt;br /&gt;
            rootThreadGroup = rootThreadGroup.getParent();&lt;br /&gt;
    }&lt;br /&gt;
    */&lt;br /&gt;
    public TimerManager () {&lt;br /&gt;
        super (/* rootThreadGroup, */ &amp;quot;Timer Manager&amp;quot;);&lt;br /&gt;
        setDaemon (true);&lt;br /&gt;
        start ();&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void register (Timer t, long deadline) {&lt;br /&gt;
        t.deadline = deadline;&lt;br /&gt;
        delete (t);  // just in case it&amp;quot;s already registered&lt;br /&gt;
        //System.err.println (&amp;quot;TimerManager: set &amp;quot; + t + &amp;quot; to go off at &amp;quot; + deadline);&lt;br /&gt;
      insertion: &lt;br /&gt;
        {&lt;br /&gt;
            for (Timer u = first; u != null; u = u.next) {&lt;br /&gt;
                if (t.deadline &amp;lt; u.deadline) {&lt;br /&gt;
                    if (u.prev != null)&lt;br /&gt;
                        u.prev.next = t;&lt;br /&gt;
                    else&lt;br /&gt;
                        first = t;&lt;br /&gt;
                    t.prev = u.prev;&lt;br /&gt;
                    t.next = u;&lt;br /&gt;
                    u.prev = t;&lt;br /&gt;
                    break insertion;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (last != null) {&lt;br /&gt;
                last.next = t;&lt;br /&gt;
                t.prev = last;&lt;br /&gt;
                t.next = null;&lt;br /&gt;
                last = t;&lt;br /&gt;
            } else {&lt;br /&gt;
                first = last = t;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        //System.err.println (&amp;quot;TimerManager: waking up background thread&amp;quot;);&lt;br /&gt;
        notifyAll ();&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void delete (Timer t) {&lt;br /&gt;
        if (t.next != null)&lt;br /&gt;
            t.next.prev = t.prev;&lt;br /&gt;
        if (t.prev != null)&lt;br /&gt;
            t.prev.next = t.next;&lt;br /&gt;
        if (t == last)&lt;br /&gt;
            last = t.prev;&lt;br /&gt;
        if (t == first)&lt;br /&gt;
            first = t.next;&lt;br /&gt;
        t.next = null;&lt;br /&gt;
        t.prev = null;&lt;br /&gt;
    }&lt;br /&gt;
    static final int FOREVER = 60000;  // wake up at least every 60 seconds&lt;br /&gt;
    public synchronized void run () {&lt;br /&gt;
        while (true) {&lt;br /&gt;
            try {&lt;br /&gt;
                //System.err.println (&amp;quot;TimerManager: awake&amp;quot;);&lt;br /&gt;
                if (first == null) {&lt;br /&gt;
                    //System.err.println (&amp;quot;TimerManager: waiting forever&amp;quot;);&lt;br /&gt;
                    wait (FOREVER);&lt;br /&gt;
                    //System.err.println (&amp;quot;TimerManager: woke up&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    Timer t = first;&lt;br /&gt;
                    long now = System.currentTimeMillis ();&lt;br /&gt;
                    if (t.deadline &amp;lt;= now) {&lt;br /&gt;
                        // System.err.println (&amp;quot;TimerManager: timer &amp;quot; + t + &amp;quot; just went off at &amp;quot; + now);&lt;br /&gt;
                        try {&lt;br /&gt;
                            t.isExpired = true;&lt;br /&gt;
                            t.alarm ();&lt;br /&gt;
                        } catch (Throwable e) {&lt;br /&gt;
                            if (e instanceof ThreadDeath)&lt;br /&gt;
                                throw (ThreadDeath)e;&lt;br /&gt;
                            else&lt;br /&gt;
                                e.printStackTrace ();&lt;br /&gt;
                        }&lt;br /&gt;
                        if (t.periodic) {&lt;br /&gt;
                            register (t, now + t.interval);&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                            delete (t);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else {&lt;br /&gt;
                        //System.err.println (&amp;quot;TimerManager: waiting for &amp;quot; + (t.deadline - now) + &amp;quot; msec&amp;quot;);&lt;br /&gt;
                        wait (t.deadline - now);&lt;br /&gt;
                        //System.err.println (&amp;quot;TimerManager: woke up&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            } catch (InterruptedException e) {}&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
class TestTimer extends Timer {&lt;br /&gt;
    String message;&lt;br /&gt;
    public TestTimer (String message, int millisec, boolean periodic) {&lt;br /&gt;
        this.message = message;&lt;br /&gt;
        set (millisec, periodic);&lt;br /&gt;
    }&lt;br /&gt;
    public void alarm () {&lt;br /&gt;
        System.out.println (message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
*/&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>