要产生一个线程,有两种方法:

◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法; ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。

哪种方法更好:

在Java中,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类.这样,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。如果自定义类必须扩展其他的类,那么就可以使用实现Runnable接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。

还有一点最重要的就是使用实现Runnable接口的方式创建的线程可以处理同一资源,从而实现资源的共享。

而利用扩展Thread类创建的多个线程,虽然执行的是相同的代码,但彼此相互独立,且各自拥有自己的资源,互不干扰。

所以,如果现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。

而如果现实问题中要求必须创建多个线程来执行同一任务,而且这多个线程之间还将共享同一个资源,那么就可以使用实现Runnable接口的方式来创建多线程程序。而这一功能通过扩展Thread类是无法实现的。

实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。

java创建线程的两种方法是_java创建线程的两种方法相关推荐

  1. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  2. java反射方法调用_Java反射(3)调用方法

    目录: 1.访问方法(Method)对象的方法汇总 2.获取方法(Method)对象中的值 3.设置方法(Method)对象中的值 1.访问Method的方法汇总 以下四种方法在Class类可以返回关 ...

  3. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  4. java两个小球相撞_JAVA小游戏之两个物体碰撞产生的碰撞检测

    首先必须了解两个物体,在移动时,会有怎样的效果,比如沪我们小时候耍过的坦克大战.看起来很简单,但是写起代码来,复杂的要多: 下面举个例子: // 构造一个新的 Rectangle,其左上角的坐标为 ( ...

  5. java的set和get方法实例化_java反射机制 调用get set 方法 | 学步园

    调用get set 方法,需要 某一个类  类中的字段  字段的值来实现 代码: package entity; import java.lang.reflect.Method; import jav ...

  6. JAVA中当子类覆盖一个父类的_java – 当子类中的某个方法被覆盖时,父类如何运行?...

    当子类重写多个方法并在其父类中调用方法时,父类是否使用它自己的预定义方法,或者子类已覆盖的方法? 对于某些背景和一个例子,我的问题源于AP计算机科学课程中的这个问题.下面,当调用super.act() ...

  7. java invoke 方法说明_java中的反射,invoke方法

    invoke,就是通过函数名反射调用相应的函数.以下代码简单地介绍了java反射中invoke方法 package org.curry.tool; import java.lang.reflect.M ...

  8. java创建线程哪种方法最好_Java创建线程的三种方法比较

    一般有三种方法,Thread,Runnable,Callable. Runnable和Callable的区别 (1)Callable规定的方法是call(),Runnable规定的方法是run(). ...

  9. java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数

    mport java.text.DecimalFormat; DecimalFormat    df   = new DecimalFormat("######0.00"); do ...

最新文章

  1. Python 解决一行代码分成多行及多行代码放在一行
  2. Deep Web 爬虫体系结构
  3. php邮件发送失败,php服务器发送邮件失败问题解析
  4. AI转型业绩哪家强?联想一季度营收853亿,净利11亿
  5. B2B专线宽带业务成为企业上云新战场——Vecloud
  6. MSP430单片机输入与输出
  7. 制作镜像包时遇到的模块加载错误的问题
  8. 原地置换法寻找数组中重复的数
  9. LeetCode 1470. 重新排列数组
  10. tabel表格制作及操作
  11. 软件共享文件服务器,服务器共享文件软件
  12. python的迭代器_python迭代器详解
  13. 文件共享锁溢出 请增加MaxLocksperFile注册表项值
  14. 在 Word 中插入域代码并设置域代码的格式(转)
  15. GIS中EPSG4326与EPSG3857的区别及转换关系-20220830更新
  16. UML 返回消息的虚线箭头 如何画
  17. cao方法matlab程序,偏最小二乘法 matlab程序 [转]
  18. windows能装linux系统盘,用U盘安装linux系统(Windows环境下制作启动盘)
  19. python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...
  20. 转载为什么USART的RX和TX和SPI的MISO、MOSI都被配置成推挽输出,他们还能正常工作

热门文章

  1. 活动目录系列之二:单域环境的实现(单站点)
  2. 苹果成为存储厂商的新饽饽
  3. 多平台移动项目开发工具Elements发布v9.1,支持Visual Studio 2017
  4. 【Java每日一题】20161019
  5. 《zw版·ddelphi与halcon系列原创教程》Halcon的短板与delphi
  6. apache commons - lang 常用方法记录
  7. 微软MCITP系列课程(十)WSUS服务器搭建
  8. SQL Server:关键字搜索
  9. PPC WM5 输入法屏蔽插件
  10. python编程八年级_8年级Python编程课程期中反思