synchronized和Lock的区别

简介: synchronized和Lock的区别

前言

最近了不起在面试,经常被问到关于synchronized和Lock的相关知识点。所以整理了一些相关资料,供大家一起学习。

synchronized

特性

synchronized是Java的关键字,是基于JVM底层的Monitor锁实现的,用于修饰方法或代码块。在JDK1.6之前,synchronized的锁性能较低,但是在JDK1.6开始,JDK对synchronized锁进行了大量的优化,同时引入了无锁、偏向锁、轻量级锁、重量级锁、锁消除、锁粗化等技术来提升synchronized锁的性能。

使用方法

synchronized有两种使用方法

  1. 锁代码块
  2. 锁方法
public class SynchronizedExample {
    public static void main(String[] args) {
        SynchronizedExample synchronizedExample = new SynchronizedExample();
        // 1.锁代码块
        synchronizedExample.syncCodeBlock();
        // 2.锁方法
        synchronizedExample.syncMethod();
    }
    private void syncCodeBlock() {
        synchronized (this) {
            System.out.println("sync code block");
        }
    }
    private synchronized void  syncMethod() {
        System.out.println("sync method");
    }
}

Lock

特性

Lock是Java并发包JUC下的接口,其有很多实现类,较为常用的是ReentrantLock,默认使用非公平锁。Lock需要进行手动加锁(lock)和解锁(unlock)。同时,Lock还有更强大的功能,如它的tryLock()方法可以非阻塞的去获取锁、使用Condition实现等待通知效果。

使用方法

public class LockExample {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
        lock.lock();
        try {
            System.out.println("lock...");
        }finally {
            lock.unlock();
        }
    }
}

对比

特征 synchronized Lock
锁类型 内置锁 显式锁
使用方式 关键字 对象实例化
可重入
可中断
公平性 不保证 可手动设置为公平或非公平
锁的数量 单一 可以创建多个
锁的灵活性 限制较多,无法扩展或自定义功能 提供更多灵活性,可以自定义功能
异常处理 由JVM自动处理 需要手动处理

总结

synchronized是一种简单且易于使用的锁机制,适合简单的线程同步需求。而Lock接口提供了更多的功能和灵活性,适用于复杂的同步场景。所以,选择哪一种锁需要基于具体的需求和设计。

相关文章
|
7月前
|
安全 Java
Synchronized和Lock的区别
Synchronized和Lock的区别
78 0
|
6月前
|
安全 Java
synchronized与Lock
synchronized与Lock
|
Java
synchronized和lock的区别
synchronized和lock的区别
93 0
|
7月前
synchronized与ReentrantLock区别与联系
synchronized与ReentrantLock区别与联系
43 0
lock和synchtonized的区别
lock和synchtonized的区别
|
Java
Lock 和 Synchronized的区别?
本章主要讲解了Lock 和 Synchronized的区别和知识点
57 0
|
程序员
ReentrantLock与synchronized的区别
ReentrantLock与synchronized的区别
|
Java
Synchronized 和 Lock 的区别和使用场景
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
746 0
线程同步的方法:Synchronized、Lock、ReentrantLock分析
线程同步的方法:Synchronized、Lock、ReentrantLock分析
java多线程关键字volatile、lock、synchronized
volatile写和volatile读的内存语义: 1. 线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。 2. 线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。 3. 线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
296 0