high-level——线程基本概念(7)

线程

一、与线程相关的一些基本概念

  1. CPU ,中央处理器,它是计算机的核心,它具有运算和处理功能;它含有计算单元,寄存器,时钟。CPU经历了单核到多核的一种发展过程,单核处理数据是串行的,一 个结束才进行下一个。多核有多个运算单元,相当于有多个CPU ,处理能力比单核要强。处理数据时可以并行操作,多个任务同时进行,此时并发的问题就出现了,但是每个cpu也存在串行执行。

  2. 并发的概念

    • 是指在某个时间段有多个任务在同时进行,时间段比较短。
  3. 并行的概念

    • 是指在某个时刻有多个任务在进行,并行针对多核,单核在一个时刻只能执行一 个任务。
    • 时间段比较短的情况下,并行与并发的差 异不大。都可能会产生数据处理的错误。
  4. 进程的概念

    • 正在执行中的应用程序,有它自己的内存,内存由操作系统分配;一台计算机中可以同时存在多个进程,多个进程可以并发执行。但是不同进程之间实现通讯比较困难。
  5. 时间片

    • cpu会把一段时间划分成很多很短的时间段,这个时间段称为时间片,时间片很短,人感受不到,我们感觉到多个程序在同时执行。
  6. 线程

    • 线程是进程中的一条执行线索,它具有任务处理能力。一个进程中可以同时执行多个线程,因此线程之间同样存在并发和并行的情况。线程之间通讯比较容易。线程只能在进程的范围内执行,它也需要CPU的时间片才能执行。不同的语言的线程有所不同,有的语言创建的线程是属于内核线程(由操作系统分配的线程) , 有的属于用户线程(由本程序自己创建的),java属于第一种就是通过系统调用让操作系统创建的线程,它可以利用操作系统管理和调度线程的优势,但是系统调用比较耗资源。java程序在不同的平台上线程的创建和管理机制是不同的,但是java有跨平台的特点, jre会依据不同的平台执行不同的操作,屏蔽了不同平台的差异,对于编程人员是感受不到它们有什么不同。java的应用程序执行后是一个进程 , 一个java的进程同时会有多个线程在执行,如果没有创建线程仍然会有多个线程存在,这些线程多半属于后台线程(守护线程, deamon)。程序一启动 , jvm会调用main方法,该方法由jvm创建的一个用户线程所执行,因此main方法就是一条执行线索 ,它所在的线程名称就是main ,可以理解为主线程。因为用户创建的线程都必须在main当中被创建和执行,因此它们都称为子线程。子线程也可以再派生出子线程。

    二、线程的创建

    1. 了解Class Thread

      • 称为线程类,该类的对象或该类子类的对象就称为线程对象,每个线程对象都可以作为一个线程执行。
      • 有多个构造方法,构造方法的参数:
        • name ,线程的自定义名称,如果不指定,系统也会分配一个默认的名称。
        • target :线程的执行目标,执行目标包含了线程执行的代码。Runnable是lang包中的一 个接口,接口只有一个run方法 ,因此启动run的执行就是启动线程。任何线程都包含有执行目标。Thread类中包含了执行目标, All Implemented Interfaces:Runnable ,因为它实现了Runnable ,因此类中就有run方法。
        • group :线程组,可以把线程归类到不同的组中,以防便管理。
        • stackSize :栈的大小,可以规定线程方法调用的层次。
    2. 通过Thread创建线程对象

      • 通过无参的构造创建的对象,因为没有指定执行目标,所以不能做具体事情。
      1. 这种方式可以重写run方法,来写自定义的执行体,因此这种方式的线程就可以完成具体任务。
      2. 多个启动的线程,可以交替执行,这就是线程的并发,此时只有获得时间片的线程才能执行,其它的只能等待。
      3. 理论上来讲,如果线程的优先级是相同的,它们应该会均匀得到时间片。在实现环境中,会受到外界进程的影响,不一定能均匀分配。用户线程的默认优先级是5 ,最大优先级是10 ,最小是1。我们可以指定线程的优先级,理论上优先级越大越会优先得到时间片。
    3. 通过实现Runnable接[ ]来创建线程执行目标

      1. 线程执行目标要被实例化为目标对象
      2. 把目标交给线程对象
      3. 通过线程对象启动线程。
      • 总结:创建线程有两种方式, 一种是继承,另一种是实现; java只能单继承,如果继承了Thread类则不能同时继承其它的类,因此扩展方面受到限制,但这种方式最简单。实现的方式不影响到当前类实现其它的接口,也可以同时继承其它的类,比较灵活,扩展性不受影响,更符合面向对象的设计思想,因此更常用,步骤要多一点。
    4. 采用匿名内部类的方式

      • 本质上属于实现的方式,但是这种写法在创建线程时可以减少类的数量,是最简捷的写法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Æ_华韵流风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值