-
Java多线程(day2—重要关键词)
Java多线程中的几个关键词
Synchronized | ReentrantLock | |
---|---|---|
层次 | JVM层面的锁,是Java关键词 | JDK提供的,属于API层面的锁 |
使用 |
1.修饰实例方法:锁的是类的实例对象 public synchronized void method() {} 2.修饰静态方法:锁的是类对象 public static synchronized void method() {} 3.修饰代码块:实例对象或类对象皆可 synchronized(this) {} synchronized(Xxx.Class) {} |
通过lock()与unlock(),结合try-finally使用 new ReentrantLock(); |
锁实现 | 锁升级 | 依赖AQS |
锁类型 | 非公平锁、可重入锁 | 可公平锁、可重入锁 |
灵活性 | 不灵活 | 支持中断、超时、尝试获取锁 |
条件队列 | 不可绑定Condition条件 | 可绑定多个Condition条件 |
-
- AQS原理
AQS内部维护了一个state状态位(默认0,标识没有被线程持有),线程通过CAS自旋尝试加锁,锁成功之后:将state设置为1,而其他线程将进入等待队列(CLH双向链表,FIFO)自旋。释放锁的时候state - 1,同时唤醒等待队列中的其他线程。
-
ThreadLocal
作用 为每个线程创建各自独立的变量副本,与其他线程隔离 说明 1.Thread类里有ThreadLocalMap类型的变量,它是ThreadLocal内部类; 2.ThreadLocalMap类似于HashMap,由一个Entry数组组成; 3.Entry的结构:key - value,key:ThreadLocal对象,value:set方法传递的值;
-
- 堆栈中的结构
ThreadLocal内存泄漏的原因,以及如何解决?
原因:
GC时,因Entry中的ThreadLocal时弱引用,易回收;而value却不一定能回收,它与CurrentThread仍存在一个强引用,因此容易导致内存泄漏。
如何解决:
调用ThreadLocal的remove()方法。
-
volatile
1. 可见性 volatile修饰的共享变量对所有线程可见,解决了可见性问题 2. 有序性 volatile禁止指令重排,解决了有序性问题 注:两者都是通过内存屏障来保证的。
出处:https://www.cnblogs.com/dork-h/p/16758528.html
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式