English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Разница между ReentrantLock и синхронизацией в Java

Есть два способа блокировать.shared ресурсы через несколько потоков. Один из них - это ретентивный замок (Or ReadWriteLock), а другой - использование метода Synchronized.

Класс ReentrantLock предоставляется в пакете Java concurrency в Java 5. 

Это реализация интерфейса Lock, по java docs, реализация интерфейса Lock предоставляет более широкий спектр операций, чем можно получить с помощью синхронных методов.

НомерКлючЗамок с возможностью повторного входаСинхронизирован
1
Получение замка 
Классы, предоставляющие замкиlock()Методы получения замка для共享ных ресурсов через нити 
Вам нужно только написать ключевое слово synced, чтобы получить замок  
2
Освобождение замка 
Чтобы освободить замок, программист должен вызватьunlock()Метод
Тайм-аут 
3
 Средства прерывания
Метод lockInterruptible() может быть использован для прерывания нити  
Нет способа прервать нить
4
Справедливость 
Конструкторы этого класса имеют параметр справедливости. Если его установить в true, то доступ будет предоставлен наиболее долгождающемуся *нити

Замок не гарантирует никакого специфического доступа
5
Порядок освобождения замка 
Замок может быть освобожден в любом порядке 
Замок должен быть освобожден в порядке получения замка 

Пример ReentrantLock

public class ReentrantLockExample implements Runnable{
   private Lock lock = new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Заключить некоторые ресурсы
      {}
      catch (InterruptedException e) {
         e.printStackTrace();
      {}
      finally {
         lock.unlock();
      {}
   {}
{}

Пример SynchronizedLock

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Заключить некоторые ресурсы
      {}
   {}
{}
Рекомендуется к просмотру