====== synchronized和lock的区别 ====== ===== 相同点 ===== Lock能完成synchronized所实现的所有功能 ===== 不同点 ===== - Lock有比synchronized更精确的线程语义和更好的性能。 - synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。 - 资源竞争不激烈,Synchronized的性能要优于ReetrantLock - 资源竞争很激烈,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态 ===== synchronized用法 ===== - 锁代码块 - 锁方法 ===== ReentrantLock用法 ===== - lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁 - tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false; - tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false; - lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断