初识线程

了解线程之前,先简单的了解下程序和进程的概念

程序:是一个静态的概念,是装在电脑硬盘上的一段指令集合
进程:是运行中的程序,所以是动态的概念。每个进程都有自己的资源空间。
线程:又可以称作轻量级的进程,是程序执行流的最小单元,是程序中一个单一的循序控制流程,是进程中的一个实体,是被系统独立调度和分派的基本单位。可以说正真干活的就是线程。
多线程:是指的在单个程序中可以运行多个不同的线程执行不同的任务

多线程拥有如下几个特点:

  • 一个进程可以包含一个或者多个线程
  • 一个程序实现多个代码同时交替运行就需要产生多个线程
  • 线程本身没有系统资源,和它所属进程的其它线程共享该进程的资源
  • 同一个进程中的多个线程可以并发执行,由CPU分配时间片,就是指在多个线程间来回切换,切换频率高,让人无法察觉

    那么由此可以看出多线程的目的其实很简单,那就是合理高效的利用CPU资源,简单的来说就是不让CPU空闲下来,例如当某一线程处理不需要占用CPU资源,而只是利用I/O等其它资源时,就可以将CPU资源分配给其它需要的线程。

创建线程的方式有两种

  1. 通过继承Thread类,成为线程类,可以通过start()方法来启动线程,运行线程中run()方法里的代码
  2. 通过实现Runnable接口创建线程,首先需要实现Runnable接口的类的实例,然后创建一个Thread类的对象,通过构造方法将Runnable对象传入,再通过Thread对象的start()方法来启动线程,运行run()方法里的代码
    由此可见,线程中run()方法的内容才是线程真正要做的事情
    通过实现Runnable接口来创建线程,可以避免单继承的局限性(因为一个类可以多实现,单继承),再者更适合资源的共享,所以更加推崇。

线程的生命周期
线程其实也像人一样有生老病死,它的状态有新建,就绪,运行,阻塞和死亡,具体如下:

这里写图片描述

  • 新建状态
    使用new关键字创建一个线程,仅是一个空对象,系统没有为其分配资源
  • 就绪状态
    使用start( )方法启动后,线程获得了除CPU之外的所需资源,处于就绪状态
  • 运行状态
    处于就绪状态的线程获得CPU资源后将会进入运行状态,开始执行run()方法中的代码,可以通过isAlive来判断线程是否处于就绪/运行状态,当处于就绪/运行状态时返回true,处于阻塞/停止状态时返回false
  • 阻塞和唤醒线程
    当线程执行了sleep()等阻塞类方法时,线程被放入一个阻塞集(Blocked Pool)内,等待超时后自动苏醒;或者多个线程进入同步区域(synchronized)时,没能获得锁线程会被置入锁定集(Lock Pool),直到得到锁才进入就绪状态;或者执行了某个对象的wait()方法,线程则会被置入等待集(Wait Pool),直到执行了该对象的notify()方法,但是这两个方法都要得到锁之后才能用
  • 死亡状态
    线程死亡分为正常死亡和异常死亡,执行完run()方法后线程终止是正常死亡,强行终止,例如使用stop()、resume()、interrupt()等方法都可能发生不可预料的后果,属于异常死亡,最好不用。

本人新手,如果有错误或存在可以改进的地方,请各位大神多多指点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值