- 多线程
- 三高:高可用,高性能,高并发
- Thread 类
- 线程是程序中执行的线程,Java虚拟机允许应用程序同时运行多个执行线程。
- 多线程
- 多任务执行,多条路径可以执行
- 多线程的优点:提高效率
- 进程 与 线程 之间的区别:
- 进程: 系统中的应用程序,一个进程之间包含1~n个线程,进程具有自己的资源,内存空间,进程是资源分配的最小单位
- 线程: 一个程序中的顺序流,多个线程共享一个进程的资源和数据空间,每一个线程具有自己的程序计数器,线程是cpu调度的最小单位
- 线程的创建:
- 继承Thread,重写run()方法,定义线程体 + start()
- 实现Runnable接口,重写run()方法 + start() --> 推荐
- juc包下Callable接口,重写call()方法
- 定义线程体的方式
- 内部类
- 匿名内部类
- Lambad表达式
- yield 礼让线程
- 当一个线程调用yield,让出cpu的资源,进入到就绪状态静态方法
- join() 插队线程
- join(ms) 插队指定的ms数
- 成员方法join,线程对象.join() 当前线程对象插队
- void interrupt() 为线程添加一个中断标识
- boolean isInterrupted() 测试此线程是否已被中断,是否已经调用过 interrupt()方法添加中断标识,是->true 不是->false
- static boolean interrupted() 测试当前线程是否已被中断, 是否已经调用过 interrupt()方法添加中断标识,是->true 不是->false,同时会复位标识
- 注意: 一个线程如果进入终止状态,线程的中断标识会复位sleep--> InterruptedException - 如果有任何线程中断了当前线程。 抛出此异常时,将清除当前线程的中断状态 。
- getState() 获取当前线程的状态
- Thread.State 线程状态。 线程可以处于以下状态之一:
- NEW
- 尚未启动的线程处于此状态。
- NEW
- Thread.State 线程状态。 线程可以处于以下状态之一:
RUNNABLE
在Java虚拟机中执行的线程处于此状态。
BLOCKED
被阻塞等待监视器锁定的线程处于此状态。
WAITING
无限期等待另一个线程执行特定操作的线程处于此状态。 wait(),join()
TIMED_WAITING
正在等待另一个线程执行最多指定等待时间的操作的线程处于此状态。阻塞与时间相关的线程处于这种状态 sleep(ms),join(ms),wait(ms)
TERMINATED
已退出的线程处于此状态。
-
- Priority 线程的优先级:线程的优先级越高,有限执行的可能性越大
- 1~10 线程优先级的数值范围
- 默认5 NORM_PRIORITY
- 最小1 MIN_PRIORITY
- 最大10 MAX_PRIORITY
- setPriority(int) 设置一个线程的优先级
- getPriority() 获取一个线程的优先级
- 1~10 线程优先级的数值范围
- 线程:
- 用户线程
- 守护线程
- 守护线程就是用来守护用户线程,当程序中所有的用户线程全部执行完毕,守护线程会直接结束
- setDaeson(true) 设置守护线程
- isDaeson() 判断线程是否为守护线程
- 现在所创建的线程默认都是用户线程
- 垃圾回收机制典型的守护线程
- Priority 线程的优先级:线程的优先级越高,有限执行的可能性越大
- 线程安全问题:
- 多线程同时操作同一份资源才有可能遇到线程不安全问题
- 同步锁: 让关键重点代码排队执行,其他代码依旧同时执行,在提高效率的基础上保证数据安全
- synchronized 关键字
4.关注点:
-
-
-
- 限制条件: 对象锁(每一个对象只有一把锁) 锁哪一个对象能锁住
- 同步的代码范围: 范围太大,效率低,范围太小,容易锁不住
-
-
5.使用方式:
-
-
- 同步方法
- 静态方法:排队执行的代码范围: 方法体
- 锁的对象 : 锁类
- 静态方法:排队执行的代码范围: 方法体
- 同步方法
-
成员方法 :
排队执行的代码范围: 方法体
锁的对象 : 调用成员方法的对象
-
-
- 同步块
- synchronized(锁的对象){
- 同步块
-
排队执行的代码;
}
锁的对象 : this 类:类的Class对象 资源
-
-
- 同步方法特点:
- 简单
- 范围太大,效率低
- 同步方法特点:
-