前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础-多线程(一)

Java基础-多线程(一)

作者头像
cwl_java
发布2019-11-12 13:10:39
5330
发布2019-11-12 13:10:39
举报
文章被收录于专栏:cwl_Java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/103007669

程序、进程与线程
  • 程序Program:程序是一段静态的代码,它是应用程序执行的蓝本
  • 进程Process:进程是指一种正在运行的程序,有自己的地址空间
  • 进程的特点
    • 动态性
    • 并发性
    • 独立性
  • 并发和并行的区别
    • 多个CPU同时执行多个任务
    • 一个CPU(采用时间片)同时执行多个任务
    在这里插入图片描述
    在这里插入图片描述
  • 线程Thread:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。
  • 线程又被称为轻量级进程(lightweight process)
  • 如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程
  • 线程特点
    • 轻量级进程
    • 独立调度的基本单位
    • 可并发执行
    • 共享进程资源
  • 线程和进程的区别
在这里插入图片描述
在这里插入图片描述
线程的创建
  • 方式1:继承Java.lang.Thread类,并覆盖run() 方法
  • 方式2:实现Java.lang.Runnable接口,并实现run() 方法

备注:方法run( )称为线程体。

线程的启动
  • 新建的线程不会自动开始运行,必须通过start( )方法启动
  • 不能直接调用run()来启动线程,这样run()将作为一个普通方法立即执行,执行完毕前其他线 程无法兵法执行
  • Java程序启动时,会立刻创建主线程,main就是在这个线程上运行。当不再产生新线程时, 程序是单线程的
两种线程创建方式的比较
  • 继承Thread类方式的多线程
    • 优势:编写简单
    • 劣势:无法继承其它父类
  • 实现Runnable接口方式的多线程
    • 优势:可以继承其它类,多线程可共享同一个Runnable对象
    • 劣势:编程方式稍微复杂,如果需要访问当前线程,需要调用Thread.currentThread()方 法

备注:实现Runnable接口方式要通用一些。

Thread类常用方法
在这里插入图片描述
在这里插入图片描述
第三种方式:实现Callable接口
  • 与实行Runnable相比, Callable功能更强大些
  • 方法不同
    • 可以有返回值,支持泛型的返回值
    • 可以抛出异常
    • 需要借助FutureTask,比如获取返回结果
Future接口
  • 可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。
  • FutrueTask是Futrue接口的唯一的实现类
  • FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行,又可以作为 Future得到Callable的返回值
线程的声明周期
在这里插入图片描述
在这里插入图片描述
  • 新生状态:
    • 用new关键字建立一个线程对象后,该线程对象就处于新生状态。
    • 处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态
  • 就绪状态:
    • 处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU
    • 当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。
  • 运行状态:
    • 在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。
    • 如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。
  • 阻塞状态:
    • 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进 入阻塞状态。
    • 在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入 就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。
  • 死亡状态:
    • 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有三个。一个是正常运行的线程完成了它的全部工作;另一个是线 程被强制性地终止,如通过执行stop方法来终止一个线程[不推荐使用】,三是线程抛出未捕获的异常
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序、进程与线程
  • 线程的创建
  • 线程的启动
  • 两种线程创建方式的比较
  • Thread类常用方法
  • 第三种方式:实现Callable接口
  • Future接口
  • 线程的声明周期
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档