浅谈Runnable和Thread的区别

时间:2021-08-15 14:00:05

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

        首先说说他们的共同点:
                    1   他们都可以实现多线程的操作,                     2   他们都需要实现run方法
         不同点就是他们一个是接口,而另一个是类,我们在实现多线程的时候,由于子类继承父类只能继承一个,但是可以实现多个接口,而且也可以实现资源的共享,所以我们多数采用的是实现Runnable这个接口,但是他需要创建Tread对象的start()方法来开启线程,所以说,也是各有利弊
          (Thread类继承自Runnable接口)
            下面,通过一段代码看看他们的不同
  
                1Runnable 需要创建Thread对象开启线程           
public class Test implements Runnable{


@Override
public 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{


@Override
public 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{


@Override
public 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方法,而且他有返回值,并且可以抛出多个异常,自处理事件等许多亮点了,但是由于他的实现特别繁琐还有其它的种种原因,现在不是很常用,所以大家了解一下就可以了