学习目标:
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( "闹钟启动了。" ); } } |
你可以运行以上程序进行测试。