线程
基本概念
程序 - 数据结构 + 算法,主要指存放在硬盘上的可执行文件
进程 - 主要指运行在内存中的程序
目前主流的操作系统都支持多进程,是为了让操作系统可以同时执行多个任务,但进程是重量级的,新建进程对系统资源的消耗比较大,因此进程的数量比较局限
线程是进程内部的程序流,也就是说操作系统支持多进程,而每个进程的内部又支持多线程,并且线程是轻量级的,会共享所在进程的资源,因此以后主流的开发都采用多线程技术
多线程技术是采用时间片轮转法来保证并发执行的效果,所谓并发就是指宏观并行微观串行的机制。
线程的创建
创建的方式
java.lang.Thread
类用于描述线程,Java虚拟机允许运行多个执行线程,而线程的创建和启动方式如下:
- 自定义类继承Thread类并重写run()方法,创建该类的对象调用start()方法
- 自定义类实现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()方法
原理分析
- 执行main()方法的线程叫做主线程,执行run()方法的线程叫做子/新线程
- 对于start()方法调用代码以及之前的代码来说,由主线程执行一次,当start()方法
调用结束后,则线程的个数瞬间由1个变成了2个,其中新启动的线程去执行run()方法,
原来的主线程继续向下执行,两个线程各自独立运行 - 当run()方法结束后则子线程结束,当main()方法结束后则主线程结束,两个线程的
执行先后次序没有明确的规定,由系统调度算法来决定
注意:
继承方式创建和启动线程的代码相对简单,但Java语言中只支持单继承,若该类继承Thread类后则无法继承其它类,而实现接口的方式虽然代码复杂,但不影响该类继承其它类以及实现其它接口,因此以后的开发中推荐使用实现接口的方式
线程的编号和名称
long getId()
- 用于获取线程的标识符/编号
String getName()
- 用于获取线程的名称
void setName(String name)
- 用于更改线程的名称
static Thread currentThread()
- 用于获取当前正在执行线程的引用并返回
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!