synchronized和Lock的区别?
1、Synchronized是内置的java关键字,Lock是一个Java类
2、Synchronized是无法判断锁的状态,Lock可以判断是否获取到了锁
3、Synchronized是会自动释放锁,业务执行完或抛出异常都会释放,Lock需要手动释放锁,不放锁会死锁
4、Synchronized如果某一个西安城阻塞,另外一个线程会傻傻等待,Lock会尝试去,不会一直等待下载
5、Synchronized是可重入锁,不可以中断的,非公平,Lock是可重入,可以判断锁,可以自由设置公平锁或非公平锁
6、synchronized适合少量代码同步的问题,Lock锁适合大量的同步代码
【一】ReentrantLock:重入互斥锁,可以重新进入的锁,当前线程通过调用lock.lock()获得锁,如果再进入这个方法,不会阻塞,增加重入的次数。
Synchronized和ReentantLock都支持重入
重入锁主要就是为了避免死循环,死锁的发生
【二】ReentrantReadWriteLock读写锁
三、AQS同步工具
1、独占,同一个时刻,只有一个线程能获得锁
2、共享