49、线程示例

学习目标:

1、能使用线程实现一些简单的功能

2、灵活的定义线程类

学习过程:

为了使大家对线程有更深的认识,这里举两个简单的例子说明一下:

一、倒计时示例

这个例子比较简单,要求程序每一秒中就输出一个数字,模拟倒计时。要实现每隔一秒才输出,只需要让程序输出一个数字就休眠1秒的时间,实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class ThreadDaoji extends Thread{

     

    public void run(){   

        for(int i=10;i>0;i--){

            System.out.println(i); 

            try {

                Thread.currentThread().sleep(1000);

            catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

}

在main函数中启动这个线程,后台将会间隔1秒输出一个,当run方法执行完毕,该线程也就结束了。代码如下:

1

2

3

4

5

6

public class Stu2 {

    public static void main(String[] args) {

        ThreadDaoji threadDaoji=new ThreadDaoji();

        threadDaoji.start();

    }

}

二、闹钟示例和传参问题

这个示例要求用户设置时和分两个世界,当到达指定的时间,程序就会发生连续的声响,提示用户时间已经到了。要实现这个功能。

我们首先讲解一下线程的传参的问题,因为线程必须实现run方法,该方法是在父类定义的,所以我们要给线程传参数,就不能通过run()方法传递的,只能定义类的全局变量,我们可以使用构造方法传参或者给全局变量设置set的方法来实现传参。比如下面这个闹钟类,就是用构造方法传参,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class ThreadAlarm extends Thread{

     

    private int hour;

    private int miniute;

     

    public ThreadAlarm(int hour,int miniute){

        this.hour=hour;

        this.miniute=miniute;

    }

     

     

    public void run(){

    }

}

run()方法就是实现闹钟的判断功能,程序每隔一秒钟就会获得当前时间,然后与用户传进来的时间进行比较,如果时间到了就发出声音,然后线程才结束。run()方法实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

   public void run(){

        while(true){

            //当前的时间是否等于用户设定的时间,每一秒都做一次判断

            Calendar calendar=Calendar.getInstance();

            //当前的时间

            int curhour=calendar.get(Calendar.HOUR);

            int curminute=calendar.get(Calendar.MINUTE);

             

            if(hour==curhour&&miniute==curminute){

                //时间到了。发出5下声响

                for(int i=0;i<5;i++){

                    try {

                        Thread.sleep(1000);

                    catch (InterruptedException e) {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                    }

                    java.awt.Toolkit.getDefaultToolkit().beep();

                }

                 

                break;

            }  

        }

    }

完成后,我们就可以在main方法中调用这个线程,要求用户输入时和分两个变量。实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 public class Stu3 {

     

    public static void main(String[] args) {

        //

        Scanner scanner=new Scanner(System.in);

        System.out.println("时:");

        int hour=scanner.nextInt();

        System.out.println("分:");

        int minute=scanner.nextInt();

         

        ThreadAlarm alarm=new ThreadAlarm(hour, minute);

        alarm.start();

        System.out.println("闹钟启动了。");

    }

}

你可以运行以上程序进行测试。

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83719797
49