浅谈Runnable和Thread的区别

        在我们需要实现多线程的过程中,毫无例外会用到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{
	

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeepMoving00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值