java synchorized lock CAS 区别

来源:互联网 发布:qq三国转职js技能 编辑:程序博客网 时间:2024/06/11 05:11

1.相同点:synchorized lock CAS 都是为了实现线程同步以及线程安全。

2.区别:

synchorized: 让代码块或则方法中的代码只能被一个线程执行.简单的理解就好像一道门,每次只允许一个人进去  当做完事情后   此人出去后 才让其他的人进来,其他人中也包括原来的那个人.  本质是:悲观锁。

lock:提供了比synchronized更多的方法,但是保留了synchronized一些方法和行为,对锁中断,锁的定时等等。

CAS:通过硬件指令的方式实现乐观锁,以及锁的非阻塞方式来实现线程之间的同步。A:预期的内存值     B:当前的内存值   V:旧的内存值。 当预期内存值A = V的时候,实现V = B。

3.缺点:

synchorized:实现的方式其中一个线程挂起的时候或则出现异常的情况 ,对其他的线程有影响

lock:必须成对出现。lock(),unlock()方法。

CAS:ABA问题。如果一个值原来是A,变成了B,后来又变成了A。使用CAS是检查不出问题的。但实际是发生了变化的。

0 0