锁
请你讲述synchronized与 java.util.locks.Lock的相同与不同之处?
(1)、主要相同点:Lock能实现synchronized所实现的所有功能,即给线程加锁。(2)、synchronized会自动释放锁,但Lock需要开发者在finally语句块中手工释放,Lock有比synchronized更好的性能和更精确的线程语义。
java中如何保证N个线程可以访问N个资源,但又同时不导致死锁?
可以指定获取锁的顺序,并强制N个线程按照指定的顺序获取锁。如果所有的线程都按照指定的顺序加锁和释放锁,就不会发生死锁。请问什么是死锁?
两个或两个以上的线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁,结果就是线程都陷入了无限的等待之中。请说明下锁和同步的区别?
(1)、用法不同:synchronized可以加在方法上,也可以加在代码块上,是托管给JVM执行的。Lock则需要开发者自己指定加锁的起始位置和终止位置。(2)、性能不同:Lock的性能优于synchronized关键字,并且Lock比synchronized有精确的线程语义,例如Lock的实现类ReentrantLock,不仅具有和synchronized相同的并发性和同步语义,还多了超时的获取锁,定时锁、等候和中断锁等。
(3)、锁机制不同:synchronized托管给JVM执行,获取锁和释放锁都是在块结构中,当获取多个锁时必须以相反的顺序释放锁,并且是自动解锁。Lock则必须由开发人员手动在finally语句块中释放锁,否则可能会引起死锁。

浙公网安备 33010602011771号