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是检查不出问题的。但实际是发生了变化的。