一:创建线程的三种方式:

1.继承Thread类

2.实现Runnable接口

3.使用Callable接口

二:创建线程的具体实现步骤:

1.继承Thread类

(1).先继承 Thread类,并且重写run方法

(2).创建对象(线程对象)

(3).调用start方法,来启动线程任务

2.实现Runnable接口

(1).实现Runnable接口,并重写 run方法

(2). 创建该类的实例对象,将该对象作为构造器参数传入Thread类实例对象,这个对象才是真正的线程对象;

(3).调用线程对象的start()方法启动该线程;

3.实现Callable接口

(1).创建Callable接口实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例;

(2).使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值

3).使用FutureTask对象作为Thread对象的target创建并启动新线程,调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

二.创建线程的三种方式的对比
1.实现Runnable或Callable接口比继承Thread类的优势

(1)Runnable或Callable接口适合多个线程进行资源共享

(2)java中单一继承,但是多接口实现,提高扩展性

(3)增加程序的健壮性,代码和数据独立

(4)线程池只能放入Runable或Callable接口实现类,不能直接放入继承Thread的类

2.Callable和Runnable之间的区别

(1) Callable重写的是call()方法,Runnable重写的方法是run()方法

(2) call()方法执行后可以有返回值,run()方法没有返回值

(3) call()方法可以抛出异常,run()方法不可以

(4) 运行Callable任务可以拿到一个Future对象,表示异步计算的结果 。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果

创建线程的三种方式及区别相关推荐

  1. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  2. 创建线程的三种方式、线程运行原理、常见方法、线程状态

    文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...

  3. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  4. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  5. Java中创建线程的三种方式

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)继承Thread类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. ...

  6. java创建线程的两种方式及区别

    本文将介绍创建线程的两种方式,示例代码在下面,复制粘贴即可 继承Thread类方式和实现Runnable接口方式 区别:由于在开发的过程中,很多的类都会用到继承的方式,如果采用继承的方式会让各个类之间 ...

  7. Java 创建线程的三种方式

    一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...

  8. java 创建数组的三种方式及区别

    创建数组的三种方式:其实分为2类,一种是静态的创建,如方式一.一种是动态的创建,只不过根据写法的不同分为方式二和方式三: // 数组初始化的三种方式//1.声明,分配空间并赋值int[] arr0 = ...

  9. React创建组件的三种方式及其区别

    React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的ext ...

最新文章

  1. Linux查看目录挂载点
  2. linux -L -l区别,linux ls -l 详解[转]
  3. RMAN backup validate database on databases in noarchivelog mode
  4. 饥荒机器人怎么用避雷针充电_新款iPhone充电线怎么这么好看~安卓也可以用!...
  5. web前端数组处理之扁平化数组
  6. Python读取Json字典写入Excel表格的方法
  7. 子矩阵(NOIP2014 普及组第四题)
  8. 命名实体识别以及词性自动标注
  9. 开工大吉:Oracle 18c已经发布及新特性介绍
  10. ASP.NET使用Coolite.Ext.Web.dll,显示ext未定义的解决方法
  11. 1013 数素数 (20 分)—PAT (Basic Level) Practice (中文)
  12. 苹果电脑程序坞不见了?怎样隐藏与显示电脑Dock栏
  13. 基于visual Studio2013解决面试题之0202上下排
  14. 如何用Java写QQ机器人 v2.0
  15. ADRC自抗扰控制,有手就行
  16. python爬取全球历年GDP数据
  17. html超链接几种写法
  18. 网易云音乐web/网页版无法播放问题
  19. MySQL语法练习---常见题型练习
  20. [论文阅读笔记40]recall与rank相结合的多视角中文过程术语标准化

热门文章

  1. 基于百度地图的电子围栏设置工具
  2. 如何解决应用安装失败错误码-13的问题
  3. char类型的unsigned 和 singed解析
  4. go os.Args 学习
  5. 操作系统中系统时钟,硬件时钟(后备时钟,实时时钟),网络时钟 辨析
  6. centos6.x(7.x)安装Nginx最佳方法
  7. php 怎么验证邮箱验证码,PHP验证邮箱是否合格
  8. EAR、JAR 和 WAR 文件有什么区别?
  9. 180107 逆向-Xman移动安全冬令营选拔赛
  10. NAT类型 四种类型 十种组合