一、作业要求:
设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间,如下所示:
线程A,休眠10秒
线程B,休眠20秒
线程C,休眠30秒
要求:
采用以下两种方式方式分别实现该功能:
1,Tread类
2,Runnable
二、代码实现
(一)、以继承Tread类的方式实现
1、代码
package task_07_Exception_Thread;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ThreadSleep extends Thread
{
// 线程休眠时间
private int sleepTime;
// 可初始化线程名称的构造方法
public ThreadSleep(String ThreadName) {
// 调用父类带参数的构造方法初始化线程名称
super(ThreadName);
}
// 设置线程休眠时间
public void setSleepTime(int sleepTime)
{
this.sleepTime = sleepTime;
}
@Override
public void run()
{
try
{
// 注意线程进入休眠的时间点
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+" --> "+Thread.currentThread().getName()+"进入休眠,休眠时间为"+sleepTime/1000+"秒");
// 让线程休眠sleepTime毫秒
Thread.sleep(sleepTime);
// 注意线程休眠结束的时间点,可以看到休眠结束与进入休眠的时间差刚好为上面的sleepTime毫秒
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+" --> "+Thread.currentThread().getName()+"休眠结束。");
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
// 创建线程A
ThreadSleep t1 = new ThreadSleep("线程A");
// 设置线程A的睡眠时间
t1.setSleepTime(10000);
// 创建线程B
ThreadSleep t2 = new ThreadSleep("线程B");
// 设置线程B的睡眠时间
t2.setSleepTime(20000);
// 创建线程C
ThreadSleep t3 = new ThreadSleep("线程C");
// 设置线程C的睡眠时间
t3.setSleepTime(30000);
System.out.println("================这是以继承Tread类的方式实现的================");
// 启动线程A、B、C
t1.start();
t2.start();
t3.start();
}
}
2、运行结果:
(二)、以实现Runnable接口的方式实现
1、代码
package task_07_Exception_Thread;
import java.text.SimpleDateFormat;
import java.util.Date;
public class RunnableSleep implements Runnable
{
// 线程休眠时间
private int sleepTime;
// 设置线程休眠时间
public void setSleepTime(int sleepTime)
{
this.sleepTime = sleepTime;
}
@Override
public void run()
{
try
{
// 注意线程进入休眠的时间点
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+" --> "+Thread.currentThread().getName()+"进入休眠,休眠时间为"+sleepTime/1000+"秒");
// 让线程休眠sleepTime毫秒
Thread.sleep(sleepTime);
// 注意线程休眠结束的时间点,可以看到休眠结束与进入休眠的时间差刚好为上面的sleepTime毫秒
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+" --> "+Thread.currentThread().getName()+"休眠结束。");
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
System.out.println("================这是以实现Runnable接口的方式实现的================");
// 实例化Runnable子类(RunnableSleep)对象r1
RunnableSleep r1 = new RunnableSleep();
// 设置该线程的休眠时间为10秒
r1.setSleepTime(10000);
// 创建以r1线程为运行对象、名称为“线程A”的实例化线程对象并启动该线程
new Thread(r1, "线程A").start();
// 实例化Runnable子类(RunnableSleep)对象r2
RunnableSleep r2 = new RunnableSleep();
// 设置该线程的休眠时间为20秒
r2.setSleepTime(20000);
// 创建以r2线程为运行对象、名称为“线程B”的实例化线程对象并启动该线程
new Thread(r2, "线程B").start();
// 实例化Runnable子类(RunnableSleep)对象r3
RunnableSleep r3 = new RunnableSleep();
// 设置该线程的休眠时间为30秒
r3.setSleepTime(30000);
// 创建以r3线程为运行对象、名称为“线程C”的实例化线程对象并启动该线程
new Thread(r3, "线程C").start();
}
}
2、运行结果: