浅谈Runnable和Thread的区别

来源:互联网 发布:阿里云青岛机房电话 编辑:程序博客网 时间:2024/06/08 12:04

        在我们需要实现多线程的过程中,毫无例外会用到Thread和Runnable这两个类和接口,所以,我简单的对这两个类做了一下分析,与大家分享一下

        首先说说他们的共同点:
                    1   他们都可以实现多线程的操作,
                    2   他们都需要实现run方法
         不同点就是他们一个是接口,而另一个是类,我们在实现多线程的时候,由于子类继承父类只能继承一个,但是可以实现多个接口,而且也可以实现资源的共享,所以我们多数采用的是实现Runnable这个接口,但是他需要创建Tread对象的start()方法来开启线程,所以说,也是各有利弊          (Thread类继承自Runnable接口)            下面,通过一段代码看看他们的不同                  1Runnable 需要创建Thread对象开启线程           
public class Test implements Runnable{@Overridepublic void run() {System.out.println("我是runnable线程");}public static void main(String[] args) {  Test t = new Test();  Thread thread = new Thread(t);  thread.start();  }}
             2Thread可以直接开启线程         
public class Test extends Thread{@Overridepublic void run() {System.out.println("我是thread线程");}public static void main(String[] args) {  Test t = new Test();  t.start();  }}
              关于资源共享的问题

               3实现Thread类

            

public class Test extends Thread{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("我是thread线程"+i);}}public static void main(String[] args) {  Test t1 = new Test();  Test t2 = new Test();  Test t3= new Test();  t1.start();  t2.start();  t3.start();    }}
          结果是(没有全部粘过来)

       我是thread线程0我是thread线程1我是thread线程0我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程1我是thread线程2我是thread线程3我是thread线程4
                  3实现Runnable接口
public class Test implements Runnable{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("我是thread线程"+i);}}public static void main(String[] args) {  Test t =new Test();  new Thread(t).start();  new Thread(t).start();  new Thread(t).start();  }}
                 结果
我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程6我是thread线程7我是thread线程8我是thread线程9
                显而易见的是在用Thread实现多线程的过程中,需要我们创建多个对象,但是在实现Runnable的过程中,只需要创建一个对象,由多个线程去共享其中的资源
 
             最后,说个题外话,除了这两个方法实现多线程以外,还有一个Callable接口可以实现多线程,但是他实现的是call方法,而且他有返回值,并且可以抛出多个异常,自处理事件等许多亮点了,但是由于他的实现特别繁琐还有其它的种种原因,现在不是很常用,所以大家了解一下就可以了

0 0
原创粉丝点击