前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >synchronized和Lock的区别

synchronized和Lock的区别

作者头像
灬沙师弟
发布2023-09-06 15:36:31
1620
发布2023-09-06 15:36:31
举报
文章被收录于专栏:Java面试教程

前言

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

synchronized

特性

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

使用方法

synchronized有两种使用方法

  1. 锁代码块
  2. 锁方法
代码语言:javascript
复制
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实现等待通知效果。

使用方法

代码语言:javascript
复制
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接口提供了更多的功能和灵活性,适用于复杂的同步场景。所以,选择哪一种锁需要基于具体的需求和设计。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • synchronized
    • 特性
      • 使用方法
      • Lock
        • 特性
          • 使用方法
          • 对比
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档