为什么ReentrantLock 可中断,而 synchronized 不行
时间: 2023-05-27 12:01:52 浏览: 216
ReentrantLock 是可中断锁,是因为他提供了一个 tryLock(long timeout, TimeUnit unit) 方法,这个方法可以让线程在给定的时间内尝试去获取锁,如果在指定的时间内没有获取到锁,就可以中断尝试获取锁的线程。
而 synchronized 是不可中断锁,因为在 synchronized 中获取锁的行为是原子性的,一旦进入了 synchronized 代码块,就会一直持有锁,直到执行完毕才会释放锁。如果想要中断正在执行 synchronized 代码块的线程,只能通过使用 Thread.interrupt() 方法进行中断操作,但是并不能立即中断线程,需要等待 synchronized 内代码块执行完毕才能中断。因此 synchronized 不支持像 ReentrantLock 那样的可中断锁。
相关问题
reentrantlock和synchronized
ReentrantLock 和 synchronized 是 Java 中用来进行线程同步的两种方式。
ReentrantLock 是一个可重入的互斥锁,它与 synchronized 有着类似的功能,但是它提供了更多的灵活性和更高的性能。ReentrantLock 提供了一些高级功能,如公平锁和可中断锁等。
synchronized 是 Java 中的关键字,它可以用来保证一段代码的原子性。synchronized 是一种比较简单的线程同步方式,但是它没有 ReentrantLock 的高级功能。
Reentrantlock 和 synchronized
的区别是什么?
ReentrantLock是JDK5中提供的一种可重入的互斥锁,相比于synchronized,它具备可中断、可终结、公平锁和多个条件变量等高级功能。而synchronized是Java语言中最基本的同步机制,虽然使用起来简单,但是有一些缺陷,例如不能指定公平性、不能中断等。另外,ReentrantLock需要手动加锁和解锁,而synchronized则由JVM管理,当访问结束后会自动释放锁。
阅读全文