初学多线程练习1--电子时钟

来源:互联网 发布:c 语言 多线程共享数据 编辑:程序博客网 时间:2024/05/25 01:35
  模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。

1.定义一个Clock类。它继承Label类,并实现Runnable接口。这个类中有一个Thread类型的clocker域,以及start()和run()方法。在run()方法中,每隔一秒就把系统时间显示为label的文本。

 1 class Clock extends Label implements Runnable 2 { 3     //定义Thread类型的clocker域 4     public Thread clocker=null; 5     public Clock() 6     { 7          8         //初始化时,把label设置为当前系统时间 9         //调用toString方法转化为String类型10         setText(new Date().toString());11     }12     //控制线程的启动13     public void start()14     {15         if(clocker==null)16         {17             //clocker通过Thread类构造方法得到的对象进行初始化,并将Clock类的当前对象作为参数18             clocker=new Thread(this);19             clocker.start();20         }21 22     }23     //控制线程的停止24     public void stop()25     {26         clocker=null;27     }28     //实现Runnable接口中的run()方法29     public void run()30     {31         Thread currentThread=Thread.currentThread();32         //判断clocker是否是当前运行的线程33         while(clocker==currentThread)34         {35                        setText(new Date().toString());36                        try37                       {      //休眠1s钟38                               clocker.sleep(1000);39             }40             catch (InterruptedException ie)41             {42                 System.out.println("Thread error:"+ie);43             }44         }45     46     }47 48 }

2.定义一个ClockFrame类。它继承Frame类,并实现ActionListener接口。在这个类中定义start和stop按钮来控制电子时钟的运行。并且这个类有一个Clock类的域,把这个Clock类对象添加到ClockFrame类中显示。

 1 public class ClockFrame extends Frame implements ActionListener 2 { 3     private Button start=new Button("Start"); 4     private Button stop=new Button("Stop"); 5     private Clock c=new Clock(); 6     public ClockFrame() 7     { 8         super("电子时钟"); 9         //设置窗体使用流式布局10         setLayout(new FlowLayout());11         //添加按钮并且为其注册监听器12         add(start);13         start.addActionListener(this);14         add(stop);15         stop.addActionListener(this);16         //使用继承WindowAdapter的匿名内部类来实现窗口的关闭17         addWindowListener(new WindowAdapter()18         {19             public void windowClosing(WindowEvent we)20             {System.exit(0);}21         });22         add(c);23         //使构件在窗口中得到合理的安排。24         pack();25         setVisible(true);26 27 28     }29     //通过调用Clock对象中的方法,实现对事件的响应。30     public void actionPerformed(ActionEvent ae)31     {32         if(ae.getSource()==start)33         {34             c.start();35         }36         else37             if(ae.getSource()==stop)38             c.stop();39 40     }41     public static void main(String[] args)42     {43         new ClockFrame();44     }45 }

3、运行:

注:

需要导入的类:

import java.awt.*;import java.awt.event.*;import java.util.Date;

0 0
原创粉丝点击