Могу ли я изменить ReentrantLock, чтобы его можно было использовать при попытке использования ресурсов?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Могу ли я изменить ReentrantLock, чтобы его можно было использовать при попытке использования ресурсов?

Сообщение Anonymous »

Я хотел спросить, подходит ли эта реализация, или, может быть, есть некоторые проблемы, которые могут стать проблематичными в дальнейшем.

Идея состоит в том, чтобы реализовать класс ReentrantLock, который может использоваться с «попробовать с ресурсами», а это означает, что он должен реализовать интерфейс AutoCloseable.

Кроме того, я хотел спросить, почему в «основном» методе компилятор выдаёт, что мне нужно добавить "подвох" предложение, потому что мой метод закрытия (в MyReentrantLock) не генерирует исключение.

Код: Выделить всё

import java.util.concurrent.locks.ReentrantLock;

public class Ex09ReentrantLock {

@SuppressWarnings("serial")
public static class MyReentrantLock extends ReentrantLock implements AutoCloseable{

public MyReentrantLock() {
super();
lock();
}

@Override
public void close(){
unlock();
}
}

public static AutoCloseable lock() {

var locker = new MyReentrantLock(); //lock() is called in the constructor

return locker;  //implements AutoCloseable
}

//Demo
public static void main(String[] args) {

//try(ReentrantLock lock = new ReentrantLock()){} = compiler error

try(var locker = lock();){
//some work...
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
  • Подходит ли эта реализация? (вызов блокировки в конструкторе...)
  • Почему компилятор заставляет меня добавлять предложение catch(), если мое закрытие не выдает исключение?


Подробнее здесь: https://stackoverflow.com/questions/591 ... -resources
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»