首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:相关概念
1.1 并发和并行
1.2 进程和线程
1.3 线程调度
1.4 多线程的应用场景
第二章:线程的创建和使用
2.1 概述
2.1 JDK 5之前创建线程的方式
2.1.1 概述
2.1.2 继承 Thread 类
2.1.3 实现 Runnable 接口
2.1.4 继承方式和实现方式的区别
2.2 设置线程名称和获取线程名称
2.3 线程的优先级
第三章:线程安全
3.1 售票程序引出线程安全
3.2 线程安全的原因
3.3 线程安全的解决方法
3.4 JDK 5 之前解决线程安全
3.4.1 概述
3.4.2 同步机制的原理
3.4.3 同步机制中的锁
3.4.4 应用示例
3.5 JDK 5 之后解决线程安全
3.6 死锁
3.7 synchronized 与 Lock 的对比
第四章:线程通信
4.1 为什么需要线程通信?
4.2 等待唤醒机制
4.3 生产者和消费者问题
4.4 sleep() 和 wait() 方法的区别
4.5 生产者和消费者性能问题
4.6 Lock 接口的深入
第五章:单例设计模式
5.1 概述
5.2 单例模式
第六章:线程池
6.1 概述
6.2 线程池相关的API
6.3 实现 Callable 接口
6.4 ThreadPoolExecutor
第七章:线程的生命周期
第八章:volatile 关键字
8.1 概述
8.2 应用示例
第九章:原子性
9.1 概述
9.2 AtomicInteger
9.2.1 常用方法
9.2.2 原理
9.2.3 源码解析
9.3 synchronized 和 CAS 的区别
第十章:并发工具类
10.1 Hashtable
10.2 ConcurrentHashMap
10.3 CountDownLatch
10.4 Semaphore
当前位置:
首页>>
技术小册>>
Java语言基础8-Java多线程
小册名称:Java语言基础8-Java多线程
在 java.lang.Thread.State 的枚举类中这样定义: ```bash public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; } ``` - 首先它没有区分:就绪和运行状态,因为对于 Java 对象来说,只能标记为可运行,至于什么时候运行,不是 JVM 来控制的了,是 OS 来进行调度的,而且时间非常短暂,因此对于 Java 对象的状态来说,无法区分。只能我们人为的进行想象和理解。 - 其次根据 Thread.State 的定义,阻塞状态是分为三种的:BLOCKED 、WAITING 、TIMED_WAITING 。 - BLOCKED :是指互有竞争关系的几个线程,其中一个线程占有锁对象时,其他线程只能等待锁。只有获得锁对象的线程才能有执行机会。 - TIMED_WAITING :当前线程执行过程中遇到 Thread 类的 sleep 或 join ,Object 类的 wait ,LockSupport 类的 park 方法,并且在调用这些方法时,设置了时间,那么当前线程会进入TIMED_WAITING ,直到时间到,或被中断。 - WAITING :当前线程执行过程中遇到遇到 Object 类的 wait ,Thread 类的 join ,LockSupport 类的 park 方法,并且在调用这些方法时,没有指定时间,那么当前线程会进入 WAITING 状态,直到被唤醒。 ■ 通过 Object 类的 wait 进入 WAITING 状态的要有 Object 的 notify/notifyAll 唤醒。 ■ 通过 Condition 的 await 进入WAITING 状态的要有 Conditon 的 signal 方法唤醒。 ■ 通过 LockSupport 类的park方法进入 WAITING 状态的要有 LockSupport 类的 unpark 方法唤醒。 ■ 通过 Thread 类的 join 进入WAITING 状态,只有调用 join 方法的线程对象结束才能让当前线程恢复。 - 说明:当从 WAITING 或 TIMED_WAITING 恢复到 Runnable 状态时,如果发现当前线程没有得到监视器锁,那么会立刻转入 BLOCKED 状态。 ![](/uploads/images/20230725/8227ab2df9372dd9b897813dfbcbc9a9.png)
上一篇:
6.4 ThreadPoolExecutor
下一篇:
第八章:volatile 关键字
该分类下的相关小册推荐:
Mybatis合辑1-Mybatis基础入门
Java语言基础5-面向对象初级
Java语言基础15-单元测试和日志技术
Java语言基础11-Java中的泛型
Java必知必会-JDBC
JAVA 函数式编程入门与实践
Java必知必会-Maven高级
Java语言基础13-类的加载和反射
Mybatis合辑3-Mybatis动态SQL
Java语言基础1-基础知识
Mybatis合辑4-Mybatis缓存机制
Java高并发秒杀入门与实战