线程

基本概念

程序 - 数据结构 + 算法,主要指存放在硬盘上的可执行文件
进程 - 主要指运行在内存中的程序

目前主流的操作系统都支持多进程,是为了让操作系统可以同时执行多个任务,但进程是重量级的,新建进程对系统资源的消耗比较大,因此进程的数量比较局限
线程是进程内部的程序流,也就是说操作系统支持多进程,而每个进程的内部又支持多线程,并且线程是轻量级的,会共享所在进程的资源,因此以后主流的开发都采用多线程技术
多线程技术是采用时间片轮转法来保证并发执行的效果,所谓并发就是指宏观并行微观串行的机制。

线程的创建

创建的方式
java.lang.Thread类用于描述线程,Java虚拟机允许运行多个执行线程,而线程的创建和启动方式如下:

  1. 自定义类继承Thread类并重写run()方法,创建该类的对象调用start()方法
  2. 自定义类实现Runnable接口并重写run()方法,创建该类的对象作为实参来构造
    Thread类的对象,然后使用Thread类对象调用start()方法

相关的方法
Thread() - 使用无参形式构造对象
Thread(String name) - 根据参数指定的名称来构造对象
Thread(Runnable target) - 根据参数指定的引用来构造对象
Thread(Runnable target, String name) - 根据参数指定引用和名称来构造对象
void run() - 若使用Runnable接口构造对象后调用该方法,则最终调用Runnable引用
指向实现类中的run()方法,否则调用该方法则表示啥也不干
void start() - 用于启动线程,Java虚拟机会自动调用该线程的run()方法

原理分析

  1. 执行main()方法的线程叫做主线程,执行run()方法的线程叫做子/新线程
  2. 对于start()方法调用代码以及之前的代码来说,由主线程执行一次,当start()方法
    调用结束后,则线程的个数瞬间由1个变成了2个,其中新启动的线程去执行run()方法,
    原来的主线程继续向下执行,两个线程各自独立运行
  3. 当run()方法结束后则子线程结束,当main()方法结束后则主线程结束,两个线程的
    执行先后次序没有明确的规定,由系统调度算法来决定

注意
继承方式创建和启动线程的代码相对简单,但Java语言中只支持单继承,若该类继承Thread类后则无法继承其它类,而实现接口的方式虽然代码复杂,但不影响该类继承其它类以及实现其它接口,因此以后的开发中推荐使用实现接口的方式
线程的编号和名称
long getId() - 用于获取线程的标识符/编号
String getName()- 用于获取线程的名称
void setName(String name)- 用于更改线程的名称
static Thread currentThread() - 用于获取当前正在执行线程的引用并返回



10月      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!