1.来源:
lock是一个接口(interface)。
synchronized是java的一个关键字,它由内置的语言实现。
2.异常是否释放锁:
lock发生异常时不会主动释放锁,必须手动unlock来释放,可能引起死锁。
synchronized发生异常时会自动释放锁,不会引起死锁。
3.是否响应中断:
lock等待锁的过程可以用interrupt来中断等待。
synchronized只能等待锁的释放,不能响应中断。
4.是否知道获取锁:
lock可以通过trylock来判断是否已经获取锁。
synchronized不能判断是否已经获取锁。
5.其他特点:
lock有读写锁,使用读锁可以提供高多个线程进行读操作的效率。
当资源的竞争很激烈时,lock的性能比synchronized要好。
synchronized使用Object对象提供的wait()、notify()、notifyAll()等方法进行线程的通信。
lock使用Condition对象await()、signal()等方法进行线程的通信。