线程示例和传参问题
为了使大家对线程有更深的认识,这里举两个简单的例子说明一下:
一、倒计时示例
这个例子比较简单,要求程序每一秒中就输出一个数字,模拟倒计时。要实现每隔一秒才输出,只需要让程序输出一个数字就休眠1秒的时间,实现代码如下:
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方法执行完毕,该线程也就结束了。代码如下:
public class Stu2 { public static void main(String[] args) { ThreadDaoji threadDaoji=new ThreadDaoji(); threadDaoji.start(); } }
二、闹钟示例和传参问题
这个示例要求用户设置时和分两个世界,当到达指定的时间,程序就会发生连续的声响,提示用户时间已经到了。要实现这个功能。
我们首先讲解一下线程的传参的问题,因为线程必须实现run方法,该方法是在父类定义的,所以我们要给线程传参数,就不能通过run()方法传递的,只能定义类的全局变量,我们可以使用构造方法传参或者给全局变量设置set的方法来实现传参。比如下面这个闹钟类,就是用构造方法传参,代码如下:
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()方法实现如下:
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方法中调用这个线程,要求用户输入时和分两个变量。实现代码如下:
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("闹钟启动了。"); } }
你可以运行以上程序进行测试。