在Java语言中,我们都知道,有两种创建线程的方式,一中是使用Runnable接口,另一种是使用Thread类。

public class DemoRunnable implements Runnable {public void run() {//Code
    }
}
//with a "new Thread(demoRunnable).start()" callpublic class DemoThread extends Thread {public DemoThread() {super("DemoThread");}public void run() {//Code
    }
}
//with a "demoThread.start()" call

已经有大量的辩论,哪一个更好。嗯,我也试着找出答案,下面是我的研究:

1)  实现Runnable接口是首选方法。在这里,您并不需要修改Thread类的行为。你只是给线程一些东西运行。这意味着组合是最好的方式。

2)  Java只支持单一继承,所以你只能继承一个类。

3)  用接口的方式将你的代码和线程实现分离,更加清晰。

4)  实现Runnable使你的类更灵活。如果您继承Thread类,那么您所做的操作总是处于一个线程中。然而如果你采用实现Runnable接口,您可以在一个线程中运行它,或者将它传递给某种执行器(executor),或者只是将它作为一个单线程应用程序中的任务传递给它。

5)  通过继承Thread类,每个线程都有一个相关联的唯一对象,而实现Runnable接口,多线程可以共享同一个Runnable实例。

6)  如果你工作在JDK 4或更低,那么有一个bug:

  http://bugs.java.com/bugdatabase/view_bug.do;jsessionid=5869e03fee226ffffffffc40d4fa881a86e3:WuuT?bug_id=4533087

  它在Java 1.5中被修复,但Sun公司不打算修复1.4中的bug。

Happy Learning !!

转载于:https://www.cnblogs.com/keeplearnning/p/7019843.html

实现Runnable接口和继承Thread类之间的区别相关推荐

  1. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例

    Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...

  2. Java中继承thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

  3. JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))

    本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...

  4. java基础 通过继承Thread类和实现Runnable接口创建线程

    java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程. 只有实现了Runnable接口或继承了Thread类的对象才能成为线程. 继承Thread类 //格式: class ...

  5. 创建线程的两种方式:继承Thread类和实现Runnable接口

    第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...

  6. 多线程中继承Thread 类和实现Runnable 接口的区别

    网上看了很多多线程里继承Thread 类和实现Runnable 接口的区别,大同小异,说下我的观点吧 区别一 创建线程的方式不同: 实现Runnable接口是代理模式,交给Thread()类去star ...

  7. 继承Thread类实现多线程简单实例

    继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...

  8. 继承Thread类使用多线程

    java实现多线程有两种方式,一种是继承Thread类,另外一种就是实现Runnable接口. 两种实现方法的优缺点: 使用Thread类实现多线程局限性就是不支持多继承,因为java是不支持类多继承 ...

  9. extends thread java_java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

最新文章

  1. 记一次数据库崩溃的恢复
  2. 标称变量(Categorical Features)或者分类变量(Categorical Features​​​​​​​)编码为数值变量(Continuous Features​​​​​​​)
  3. windows批处理實例
  4. 多线程开发之---线程等待
  5. poj1664(放苹果)
  6. Android的DataBinding原理介绍
  7. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)
  8. 按揭买的房,房产证为什么要放在银行,自己要用房产证怎么办?
  9. 这样用Docker 搭建 Jenkins 实现自动部署,你知道吗?
  10. Java基础学习-Path环境变量的配置
  11. 2020年1月数据库流行度排行:从万里挑二到波澜不惊
  12. 【机器学习_2】机器学习资料
  13. C#:“System.Web.Mvc.Controller.File(byte[], string)”是一个“方法”,这在给定的上下文中无效
  14. linux下oracle12C新建数据库,linux环境下手工创建oracle11g数据库(未完)
  15. 2017年上半年软件设计师考试真题及答案(上午+下午)免费
  16. 堆中的off-by-one :ASIS CTF 2016:b00ks
  17. 债券价格和到期收益率的关系_什么是到期收益率 到期收益率与债券价格的关系...
  18. 论文阅读:在Stiefel流形上的黎曼优化
  19. 【论文解读】(2019-EMNLP)Tackling Long-Tailed Relations and Uncommon Entities in Knowledge Graph Completi
  20. 基因编辑最新研究进展(2021年8月)

热门文章

  1. javascript 数组合并与去重
  2. Sharepoint CAML 增删改查 List
  3. 今天react开发遇到个比较恶心的问题
  4. HIT Software Construction Review Notes (chapter three)
  5. Linux---解决校园网下VM与Xshell连接问题
  6. 后起之秀,《你好,李焕英》,票房已过十个亿和唐探三哪个好?
  7. 所有的生意都是在做两件事
  8. 成年人的世界里,赚钱是保护自己和身边人最高效的手段
  9. 是什么决定了创业的成败?
  10. 这是一个最不缺“大师”的时代