多线程-创建线程第二种方式-实现Runnable接口-细节和好处

 1 package multithread2;
 2 
 3 /*
 4  * 创建线程的第一种方法:继承Thread类
 5  * 
 6  * 创建线程的第二种方式:实现Runnable接口
 7  * 
 8  * 1,定义类实现Runnable接口。
 9  * 2,覆盖接口中的run方法,将线程的任务代码封装到run方法中。
10  * 3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
11  *         为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。
12  *         所以要在线程对象创建时就必须明确要运行的任务。
13  * 4,调用线程对象的start方法开启线程
14  * 
15  * 
16  * Runnable出现仅仅是将线程的任务进行对象的封装
17  * 
18  * 实现Runnable接口的好处:
19  * 1,将线程的任务从线程的子类中分离出来,进行了单独的封装。
20  *      按照面向对象的思想将任务的封装成对象。
21  * 2,避免了java单继承的局限性。
22  * 
23  * 所以,创建线程的第二种方式较为常用
24  * 
25  */
26 
27 
28 class Demo implements Runnable {//extends Fu {//如果自己本身有父类怎么解决实现run方法呢?准备扩展Demo类的功能,让其中的内容可以作为线程的任务
29                                    //通过接口的形式完成
30     
31     public void run() {
32         show();
33     }
34     public void show() {
35         for (int x = 0; x < 20; x++) {
36             System.out.println(Thread.currentThread().getName()+"...."+x);
37         }
38     }
39 }
40 public class ThreadDemo {
41 
42     public static void main(String[] args) {
43         // TODO Auto-generated method stub
44         Demo d = new Demo();
45         Thread t1 = new Thread(d);
46         Thread t2 = new Thread(d);
47         t1.start();
48         t2.start();
49 //        Demo d1 = new Demo();
50 //        Demo d2 = new Demo();
51 //        d1.start();
52 //        d2.start();
53     }
54 
55 }
56 
57 
58 class Thread{
59     private Runnable r;
60     Thread(){
61         
62     }
63     Thread(Runnable r){
64         this.r = r;
65     }
66     public void run() {
67         if (r!=null) {
68             r.run();
69         }
70         
71     }
72     public void start() {
73         run();
74     }
75 }
76 
77 
78 class ThreadImpl implements Runnable{
79     public void run() {
80         System.out.println("runnable run");
81     }
82     
83 }
84 ThreadImpl i = new ThreadImpl();
85 Thread t = new Thread(i);
86 t.start();
87 
88 /*
89 class SubThread extends Thread{
90     public void run() {
91         System.out.println("haha");
92     }
93 }
94 SubThread s = new SubThread();
95 s.start();
96 */
ThreadDemo

 

posted @ 2021-10-28 21:00  doremi429  阅读(13)  评论(0编辑  收藏  举报