首页 > 技术文章 > Java 并发笔记

bigorang 2019-08-08 11:37 原文

  1. 避免一个线程同时获取多个锁。
  2. 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
  3. 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。
  4. 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

valatile的两个作用:
1.声明变量内存可见性
当一个线程修改一个共享变量时,另外一个线程总是能读到这个修改后的值

(1)对于写操作:对变量更改完之后,要立刻写回到主存中。
(2)对于读操作:对变量读取的时候,要从主存中读,而不是缓存。

2.禁止指令的重排序
if (a == null){
Object a = new Object;
}
附:什么是指令重排序?
CPU在执行指令时,在保证执行结果一致的情况下,对部分代码进行重新排序操作;

int i = 1;
int b = 2;
两个语句执行的顺序可能会交换

推荐阅读