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

  模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。

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                        try
37                       {      //休眠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         else
37             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;

原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/4979674.html