摘要: synchronized 竞争锁时会一直等待;ReentrantLock 可以尝试获取锁,并得到获取结果 synchronized 获取锁无法设置超时;ReentrantLock 可以设置获取锁的超时时间 synchronized 无法实现公平锁;ReentrantLock 可以满足公平锁,即先等待 阅读全文
posted @ 2019-12-10 09:52 ConstXiong 阅读(1480) 评论(0) 推荐(0) 编辑
摘要: 实现层面不一样。synchronized 是 Java 关键字,JVM层面 实现加锁和释放锁;Lock 是一个接口,在代码层面实现加锁和释放锁 是否自动释放锁。synchronized 在线程代码执行完或出现异常时自动释放锁;Lock 不会自动释放锁,需要再 finally {} 代码块显式地中释放 阅读全文
posted @ 2019-12-10 09:51 ConstXiong 阅读(701) 评论(0) 推荐(0) 编辑
摘要: 作用: synchronized 表示只有一个线程可以获取作用对象的锁,执行代码,阻塞其他线程。 volatile 表示变量在 CPU 的寄存器中是不确定的,必须从主存中读取。保证多线程环境下变量的可见性;禁止指令重排序。 区别: synchronized 可以作用于变量、方法、对象;volatil 阅读全文
posted @ 2019-12-10 09:50 ConstXiong 阅读(3774) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal 是线程本地存储,在每个线程中都创建了一个 ThreadLocalMap 对象,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。通过这种方式,避免资源在多线程间共享。 经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就 阅读全文
posted @ 2019-12-10 09:24 ConstXiong 阅读(4422) 评论(0) 推荐(2) 编辑