美文网首页
线程基本知识之开篇介绍

线程基本知识之开篇介绍

作者: 码上就说 | 来源:发表于2018-11-10 12:41 被阅读71次

日常的开发中,多线程非常常见了,为了提高生产效率或者高效完成任务,经常会采用多线程和并发运行方式。所谓并发,指在某个时间段内,多个任务交替处理的能力。所谓并行,是指同时处理多任务的能力。


并发和并行两者的主要区别是进程是否同时执行。


目前CPU已经发展多核,可以同时执行多个互不依赖的指令以及执行代码块。超市一个柜台收营员,一会儿要收钱,一会儿要帮客户包装东西,一会儿还要验收商品,可以说这个收营员就处于并发的状态。
从上面的例子能够看出来,并发情况可能会存在一些性能问题。

  • 并发执行的程序之间有相互的制约关系,因为资源是有限的,有时候后一个程序的执行可能依赖前一个程序执行的结果。或者说多个程序都需要竞争计算资源。
  • 并发程序执行时断断续续的,所谓并发,就是多个程序之间切换,某些程序肯定不可能一蹴而就,所以程序需要记忆现场指令以及上一次执行点。
  • 并发执行程序还是有可能通过设置合理的调度策略来提升程序的运行效率。

线程概念:线程是CPU调度和分派的基本单位。为了充分利用CPU资源,会实现多程序来调度执行,提升程序执行效率。
线程可以拥有自己的操作栈、PC(程序计计数器)、局部变量表等,一个进程会有一个或者多个线程,同一个进程的线程共享进程的所有资源。
谈到线程,不得不谈到线程状态以及它们之间的切换。

线程状态切换图.jpg
这儿我觉得值得考察的点事线程状态之间切换的场景,会让你说下什么场景下从一个状态切换到另外一个状态。
  • 线程Running状态:
  • 直接切换到Dead状态:可能调用了stop(但是这个方法不建议使用,已经被废弃了),或者开发者直接加上了判断逻辑终止线程执行。
  • 切换到Blocked状态:
    1.调用了sleep方法。
    2.调用了wait方法。
    3.获取锁资源导致竞争锁进入阻塞状态。
    4.IO耗时导致阻塞。
  • 切换到Runnable状态:
    1.CPU执行时间片用完导致进入Runnable状态。
    2.主动调用yield导致放弃CPU进入Runnable状态。
  • 线程Blocked状态:
  • 切换到Dead状态:
    这种情况很少见,当Blocked的时候直接调用stop,但是基本上不用了,或者JVM发生crash导致终端退出了。
  • 切换到Runnable状态:
    1.sleep执行结束
    2.wait的线程被其他线程notify或者notifyAll唤醒。
    3.线程竞争到锁进入Runnable状态。
    4.IO耗时操作执行完成,进入Runnable状态。

希望能帮到大家,感谢。
《线程创建的基本方式》这篇文章总结的不错,学习学习。

相关文章

  • 线程基本知识之开篇介绍

    日常的开发中,多线程非常常见了,为了提高生产效率或者高效完成任务,经常会采用多线程和并发运行方式。所谓并发,指在某...

  • Python多线程编程——创建线程的两个方法

    之前的一篇文章:Python多线程编程——多线程基础介绍,主要介绍了线程的基本知识,以及使用Python创建线程的...

  • Java一线程基础

    旨在介绍线程的基本知识,这里基本不涉及多线程相关 目录: 一、什么是线程 二、线程的作用 三、线程分类 四、线程优...

  • Java多线程(二)线程的创建及线程的生命周期

    在多线程(一)中,我们简要地介绍了线程基本知识,下面主要介绍创建线程的两种方法,并分析线程的几种基本状态。 创建线...

  • Java多线程总结(1)

    本文不打算介绍过多多线程的基本知识,旨在总结一下使用多线程中需要注意的东西。 大家都知道要写多线程代码可以实现Ru...

  • PalDB 写数据过程

    开篇 PalDB 介绍 PalDB 写数据过程 PalDB 读数据过程 PalDB 线程安全版本 PalDB写数据...

  • PalDB 读数据过程

    开篇 PalDB 介绍 PalDB 写数据过程 PalDB 读数据过程 PalDB 线程安全版本 PalDB re...

  • GCD 中的线程组 Group

    前言 本文主要介绍 GCD 中的线程组 Group,不讲 GCD 基础概念知识。如果对 GCD 的基本知识点不是很...

  • 多线程详解之开篇

    多年来,并发就像是阻在程序员面前的一座大山,令无数人“闻之色变”。我们或者不知道何为并发,或者不知道为何需要并发,...

  • 【多线程入门系列一】线程的创建,启动与停止

    多线程入门系列(一) 线程的基本知识 线程的创建 继承Thread类 实现Runnable接口 实现Callabl...

网友评论

      本文标题:线程基本知识之开篇介绍

      本文链接:https://www.haomeiwen.com/subject/bkjaxqtx.html