syn关键字就是可重入的,可以在m1方法中调用m2方法.syn中可以调用syn方法
可重入锁,用于替换syn。但是syn是自动解锁的,Reentrant lock 需要手动解锁
排他锁
生产者问题与消费者问题,原本想用两把Object锁发现不行,因为wait与notify需要有锁才可以使用不然就会出错,而线程无法先确定谁先开启唤醒,唤醒如果没有wait的线程会报错
lock、unlock
使用起来与syn相同trylock:尝试获取锁
lockinterruptibly:获取一个可以被打断的锁,如被Thread.interrept中断方法,于是此线程会抛出异常,退出
Condition produce = lock.newCondition(); produce.await();//释放锁并阻塞当前线程!!aqs
讲先来后到,在队列中
syn是非公平锁
sync锁升级、cas操作
trylock
可被打断的锁lockinterruptibly
syn只有非公平锁、reentrant有公平与非公平的切换
api
Countdown,每次-1reentrantreadwritelock
共享锁排他锁18个读,2个写线程
读写锁效率比单纯的排他锁效率高
使用unsafe类来实现
api
locksupport.park:阻塞locksupport.unpark(Object);解除阻塞