贸易 来源:博客园 时间:2023-06-28 09:16:05
(相关资料图)
目录Synchronize(同步锁)和ReentrantLock(可重入锁)都是Java中的常用锁,都是用来保证线程安全的。两者都是同步锁,且都是阻塞同步。
在多个线程请求资源的时候,如果根据线程请求的顺序来分配资源,那么这个锁就是公平锁,反之就是非公平锁。
在线程阻塞期间,阻塞线程等待资源的使用,如果这种等待状态能够被中断,从而释放线程去做其他的事情,这就称为等待可中断。
Synchronize是Java的关键字,ReentrantLock是Java类。因此,Synchronize是JVM层面语法层面的同步锁,ReentrantLock是API层面的同步锁
如下代码展示了它们的具体用法:
//synchronized修饰一个方法时,这个方法叫同步方法。public synchronized void test() {//方法体``}synchronized(Object) {//括号中表示需要锁的对象.//线程执行的时候会对Object上锁}
public class LockExample { // 创建锁对象 private final ReentrantLock lock = new ReentrantLock(); public void method() { // 加锁操作 lock.lock(); try { // ... } finally { // 释放锁 lock.unlock(); } }}
ReentrantLock相比于Synchronize,有以下特点:
这些特点都是Synchronize锁所不具备的。
Sychronize是JVM层面的同步锁,实现简单,性能较好;ReentrantLock是API层面的同步锁,需要手动创建和释放锁,性能较差,但是增加了很多特点,灵活性较好。
Synchronize适用于:
对上述内容进行总结,如下表所示:
标签:
下一篇:最后一页