为了使大家对线程有更深的认识,这里举两个简单的例子说明一下:
一、倒计时示例
这个例子比较简单,要求程序每一秒中就输出一个数字,模拟倒计时。要实现每隔一秒才输出,只需要让程序输出一个数字就休眠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) {
e.printStackTrace();
}
}
}
public static void main(String []args) {
ThreadDaoJi threadDaoJi=new ThreadDaoJi();
//启动线程
threadDaoJi.start();
}
}
二、闹钟示例和传参问题
这个示例要求用户设置时和分两个世界,当到达指定的时间,程序就会发生连续的声响,提示用户时间已经到了。要实现这个功能。
我们首先讲解一下线程的传参的问题,因为线程必须实现run方法,该方法是在父类定义的,所以**我们要给线程传参数,就不能通过run()方法传递的,只能定义类的全局变量,我们可以使用构造方法传参或者给全局变量设置set的方法来实现传参。**比如下面这个闹钟类,就是用构造方法传参,代码如下:
package test;
import java.util.Calendar;
public class ThreadAlarm extends Thread {
private int hour;
private int minute;
public ThreadAlarm(int hour,int minute) {
this.hour=hour;
this.minute=minute;
}
public void run() {//实现闹钟判断功能
while(true) {
//当前时间是否等于用户设定的时间,每一秒都做一次判断
Calendar calendar=Calendar.getInstance();
//当前时间
int curhour=calendar.get(Calendar.HOUR);
int curminute=calendar.get(Calendar.MINUTE);
if(hour==curhour&&minute==curminute) {
//时间到了,发出5次声响
for(int i=0;i<5;i++) {
try {
Thread.sleep(10000);
}catch(InterruptedException e) {
e.printStackTrace();
}
java.awt.Toolkit.getDefaultToolkit().beep();
}
break;
}
}
}
}
main函数,调用线程
package test;
import java.util.Scanner;
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("闹钟启动了!");
}
}