1、synchronized和lock有什么区别?
- synchronized属于jvm层面,在字节码中使用monitorenter和monitorexit指令来实现, 其中wait和notify方法也依赖于monitor对象才能调用,而lock是api层面的类
- 使用synchronized不需要用户手动去释放锁,执行完之后系统会自动释放,而lock类 需要用户配合try/finally语句,手动调用unlock去完成
- synchronized不可中断,除非正常运行完毕或抛出异常,而ReentrantLock可以中断, 并可以设置超时时间
- synchronized和ReentrantLock默认都是非公平锁,但是ReentrantLock可以设置为非 公平锁
- ReentrantLock可以绑定多个条件condition,分组唤醒不同的线程,而synchronized 要么随机唤醒一个,要么唤醒全部