线程的概念
程序:Program,是一个指令的集合
进程:Process(正在执行的程序)是一个静态的概念
进程是程序的一次静态执行过程,占用特定的地址空间
每个进程都是独立的,由3部分组成cup,data,code
缺点:内存的浪费,cpu的负担
线程:是进程中一个"单一的连续控制流程"执行路径
线程又被称为轻量级进程
一个进程可拥有多个并行的线程
一个进程中的线程共享相同的内存单元/内存地址空间->可以访问相同的变量和对象,而且他们从同一堆中分配对象->通信、数据交互、同步操作
由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简单而且通信更简便而且信息传递的速度也更快。
进程是申请资源的最小单位,线程可以共享资源
进程与线程
一个进程中至少有一个线程
实现多线程的时候:
1.需要继承Thread类
2.必须重写run方法,指的是核心执行的逻辑
3.线程在启动的时候,不需要直接调用run方法,而是要通过start()来进行调用
4.每次运行相同的代码,出来的结果不一样,原因在于多线程谁先抢占资源无法进行人为控制
第二种实现方式(使用了代理设计模式)
1.实现Runnable接口
2.重写run方法
3.创建Thread对象,将刚刚创建的runnable的子类实现类作为thread的构造参数
4.通过thread.start()进行启动
推荐使用第二种方式
1.java是单继承,将继承关系留给最需要的类
2.使用runnable接口之后不需要给共享的变量添加static关键字,每创建一个对象作为共享对象即可
线程的生命周期
1.新生状态
当创建好当前线程对象之后,没有启动之前(调用start方法之前)
2.就绪状态:准备开始执行,并没有执行,表示调用start方法之后
当对应的线程创建完成,且调用start方法之后,所有的线程会添加到一个就绪队列中,所有的线程同时去抢占cpu的资源
3.运行状态:当前进程获取到cpu资源之后,就绪队列中的所有线程都会去抢占cpu资源,谁先抢到先执行,在执行的过程中就叫做运行状态
抢占到cpu资源,执行代码逻辑开始
4.死亡状态:当运行的线程正常执行完所有的代码逻辑或者因为异常情况导致程序结束叫做死亡状态
进入方式:
1.正常运行完成且结束
2.人为中断执行,比如使用stop方法
3.程序抛出异常未捕获
5.阻塞状态:在程序运行过程中,发生异常情况,导致当前线程无法再顺利执行下去,此时就会进入阻塞状态
所有的阻塞状态都会进入到就绪状态中,随机抢占cpu的资源,等待执行
进入的方式:
sleep()方法
等待IO资源
Thread的一些方法
实列