English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Есть два способа блокировать.shared ресурсы через несколько потоков. Один из них - это ретентивный замок (Or ReadWriteLock), а другой - использование метода Synchronized.
Класс ReentrantLock предоставляется в пакете Java concurrency в Java 5.
Это реализация интерфейса Lock, по java docs, реализация интерфейса Lock предоставляет более широкий спектр операций, чем можно получить с помощью синхронных методов.
Номер | Ключ | Замок с возможностью повторного входа | Синхронизирован |
---|---|---|---|
1 | Получение замка | Классы, предоставляющие замкиlock() Методы получения замка для共享ных ресурсов через нити | Вам нужно только написать ключевое слово synced, чтобы получить замок |
2 | Освобождение замка | Чтобы освободить замок, программист должен вызватьunlock() Метод | Тайм-аут |
3 | Средства прерывания | Метод lockInterruptible() может быть использован для прерывания нити | Нет способа прервать нить |
4 | Справедливость | Конструкторы этого класса имеют параметр справедливости. Если его установить в true, то доступ будет предоставлен наиболее долгождающемуся *нити | Замок не гарантирует никакого специфического доступа |
5 | Порядок освобождения замка | Замок может быть освобожден в любом порядке | Замок должен быть освобожден в порядке получения замка |
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(); {} {} {}
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (resource) { //Заключить некоторые ресурсы {} {} {}