实例要求:
设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间。如下所示:
问怎么设计?
分析
从之前学习知道,线程的实现有两种方式,一种是继承Thread类,另一种是实现Runnable接口。而且类中应保存线程名称和休眠时间属性。
1,通过Thread类实现。
在Thread类中直接存在name属性。所以不用定义name属性,直接在子类构造方法通过super(name)方法设置即可。
class MyThread extends Thread{ private int time ; //time要自己定义 public MyThread(String name,int time){ super(name) ; // 设置线程名称,因为Thread本身存在name属性,所以不用定义name属性,直接在子类构造方法通过super(name)方法设置即可 this.time = time ; // 设置休眠时间 } public void run(){ try{ Thread.sleep(this.time) ; // 休眠指定的时间 }catch(InterruptedException e){ e.printStackTrace() ; //打印错误。 } System.out.println(Thread.currentThread().getName() + "线程,休眠" + this.time + "毫秒。") ; } }; public class ExecDemo01{ public static void main(String args[]){ MyThread mt1 = new MyThread("线程A",10000) ; // 定义线程对象,指定休眠时间 MyThread mt2 = new MyThread("线程B",20000) ; // 定义线程对象,指定休眠时间 MyThread mt3 = new MyThread("线程C",30000) ; // 定义线程对象,指定休眠时间 mt1.start() ; // 启动线程 mt2.start() ; // 启动线程 mt3.start() ; // 启动线程 } };
运行结果:
一个个休眠多少秒后一个个执行线程。
线程A线程,休眠10000毫秒。
线程B线程,休眠20000毫秒。
线程C线程,休眠30000毫秒。
2,使用Runnable接口实现。
则类中是没有name属性的,所以应该单独建立一个name属性,以保存线程的名称。
class MyThread implements Runnable{ private String name ; private int time ; public MyThread(String name,int time){ this.name = name ; // 设置线程名称 this.time = time ; // 设置休眠时间 } public void run(){ try{ Thread.sleep(this.time) ; // 休眠指定的时间 }catch(InterruptedException e){ e.printStackTrace() ; } System.out.println(this.name + "线程,休眠" + this.time + "毫秒。") ; } }; public class ExecDemo02{ public static void main(String args[]){ MyThread mt1 = new MyThread("线程A",10000) ; // 定义线程对象,指定休眠时间 MyThread mt2 = new MyThread("线程B",20000) ; // 定义线程对象,指定休眠时间 MyThread mt3 = new MyThread("线程C",30000) ; // 定义线程对象,指定休眠时间 new Thread(mt1).start() ; // 启动线程 new Thread(mt2).start() ; // 启动线程 new Thread(mt3).start() ; // 启动线程 } };