Thread 和 Runnable 的区别

今天在学习多线程的时候,了解了 创建线程的几种方式,然后就脑子发热,突然想到 Thread 和 Runnable 创建线程有什么区别吗?毕竟是长得都不一样。所以我就找了一些资料(CSDN 大佬们的文章)来看看,有了一些理解。

明确一点:RunnableThread 本质上是没有区别的。

区别

如果非要说区别的话,那么就有一下几点

  1. Runnable 和 Thread 创建线程的方式不一样
  2. Runnable 是接口,Thread 是实体类,Thread 和 Runnable 的关系就是实体与实现的关系。
  3. 在使用上,如果有复杂的线程操作需求,那就选择继承Thread,如果只是简单的执行一个任务,那就实现Runnable 。

先来看一下Runnable 源码
在这里插入图片描述
只有一个简单的 run(); 方法;
这个 run 不仅能 run 线程,还有其他东西也能 run(这个是目前的理解,至于其他东西是什么,我也无法举例)
而设置 Runnable 接口的目的就在于:Java 中只能实现单继承,而可以实现多个接口。如果某个类想 run,还行实现其他的,那么就可以通过实现 Runnable 接口完成 run,再实现其他接口或者继承其他类完成 多功能

如果通过 Runnable 接口创建一个线程,那么应该是这样

class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("实现 Runnable 节后后创建线程");
    }
}

public class Test{
	
	// 方法 1 : 通过继承 Runnable 创建线程
    public static void main1(String[] args) {
    	// 向上转型 父类引用指向子类对象
        Runnable myThread = new MyThread ();
        
        Thread thread = new Thread(myThread);
        thread.start();
    }


	// 方法 2 : 通过 Runnable 匿名内部类创建线程
    public static void main2(String[] args) {
       Thread thread = new Thread(new Runnable() {
           @Override
           public void run() {
               System.out.println("Runnable 匿名内部类创建线程");
           }
       });
       thread.start();
   }

}

通过继承 Thread 创建线程

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("继承 Thread 接口创建线程");
    }
}

public class TestDemo2 {
	// 方法 1 : 继承 Thread 类创建线程
    public static void main1(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
    
    // 方法 2 : 匿名内部类创建线程
    public static void main2(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                System.out.println("Thread 匿名内部类创建线程");
            }
        };
        thread.start();
    }

}

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值