zoukankan      html  css  js  c++  java
  • synchronized与Lock的区别


    介绍:

    synchronized:它是Jdk自带的一种锁机制,它能够锁住当前的对象,资源类,以及同步方法块。

    Lock:它是Java 1.5之后提供的一种新的机制,能够更好的去操作当前的线程

    Lock的优点:锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。

    Lock: lock接口的实现主要有 ReentrantLock,ReadLock,ReadLockView,WriteLock,WriteLockView等,我们主要以ReentrantLock来讲解;

    如何使用:

    class X {
       private final ReentrantLock lock = new ReentrantLock();
       // ...
     
       public void m() {
         lock.lock();  // block until condition holds
         try {
           // ... method body
         } finally {
           lock.unlock()
         }
       }
     }
     

     synchronized与Lock的区别 

    两者区别:
    1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
    2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
    3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
    4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
    5.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)
    6.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

  • 相关阅读:
    RESTful API 设计指南
    SpringBoot系列
    spring boot RESTFul
    mark--唧唧歪歪--2021.2.8
    接口踩坑:Status (blocked:other)
    获取layer.open弹出层的返回值
    VUE_CLI4.5 VUE+Cesium
    Android Studio AVD 模拟器 自带虚拟机 联网 连接网络
    一文搞懂TCP与UDP的区别
    springboot打包成war,部署到tomcat无法访问的问题
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/12735889.html
Copyright © 2011-2022 走看看