1、synchronized属于隐式锁,即锁的持有与释放都是隐式的,我们无需干预
2、显式锁,即锁的持有和释放都必须由我们手动编写
3、重入锁ReetrantLock,所谓锁的公平和非公平
如果在时间上,先对锁进行获取的请求,一定先被满足,这个锁就是公平的,不满足,就是非公平的
非公平的效率一般来讲更高
4、ReadWriteLock接口和读写锁ReentrantReadWriteLock
读写锁:同一时刻允许多个读线程同时访问,但是写线程访问的时候,所有的读和写都被阻塞,最适宜与读多写少的情况
5、用Lock和Condition实现等待通知
Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法。不同的是,Object中的这些方法是和同步锁捆绑使用的;而Condition是需要与互斥锁/共享锁捆绑使用的。
2.Condition它更强大的地方在于:能够更加精细的控制多线程的休眠与唤醒。对于同一个锁,我们可以创建多个Condition,在不同的情况下使用不同的Condition。
6、什么是AQS?
AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(例如,ReentrantLock)和共享锁(例如,Semaphore)的公共父类。AQS通过cas实现。
7、AQS使用方式和其中的设计模式通过模板设计模式(继承父类模板方法,子类进行详细设计)
8、
独占锁 – 锁在一个时间点只能被一个线程锁占有。根据锁的获取机制,它又划分为“公平锁”和“非公平锁”
9、共享锁 --能被多个线程同时拥有,能被共享的锁。JUC包中的ReentrantReadWriteLock.ReadLock,CyclicBarrier, CountDownLatch和Semaphore都是共享锁。
10、AQS中的数据结构-节点和同步队列
依赖于先进先出 (FIFO)等待队列

666

被折叠的 条评论
为什么被折叠?



