主要区别

1、Lock能完成几乎所有synchronized的功能,并有一些后者不具备的功能,如公平锁、等待可中断、锁绑定多个条件等;

2、synchronized 是Java 语言层面的,是内置的关键字;Lock 则是JDK 5中出现的一个包,在使用时,synchronized 同步的代码块可以由JVM自动释放;Lock需要程序员在finally块中手工释放,如果不释放,可能会引起难以预料的后果。

 

可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。

public class Test implements Runnable{
 public synchronized void get(){
  System.out.println(Thread.currentThread().getId());
  set();
 }

 public synchronized void set(){
  System.out.println(Thread.currentThread().getId());
 }

 @Override
 public void run() {
  get();
 }
 public static void main(String[] args) {
  Test ss=new Test();
  new Thread(ss).start();
  new Thread(ss).start();
  new Thread(ss).start();
 }
}

两个例子最后的结果都是正确的,即 同一个线程id被连续输出两次

结果如下:

Threadid: 8
Threadid: 8
Threadid: 10
Threadid: 10
Threadid: 9
Threadid: 9
View Code

相关文章:

  • 2021-08-14
  • 2021-07-27
  • 2021-11-27
  • 2021-07-04
  • 2022-12-23
  • 2022-03-02
  • 2022-01-03
  • 2022-12-23
猜你喜欢
  • 2021-12-29
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-04
  • 2021-06-08
相关资源
相似解决方案