Будут ли рефакторированные методы в веб-приложении Java-Struts вызвать раздор?

StackOverflow https://stackoverflow.com/questions/8323901

Вопрос

Я работаю с компанией, которая производит веб -приложение, используя стойки с Java. Я недавно рефакторировал много кода, чтобы привлечь систему. Одна техника, которую я использовал, - это перемещать заключительные операторы для потоков, в в конце концов блоки методов в утилита. Утилита класс является статичным и имеет близкие методы для различных типов потоков. Выполняя это рефакторинг, я сохраняю 5 строк кода каждый раз, когда необходимо закрыть поток, что уменьшало код в некоторых классах на 600 строк, что делает его очень благоприятным. Однако я беспокоюсь, что это может быть возможно вызвать споры по этому методу, если он будет помещен в производство.

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

Это возможно? Или просто мое недопонимание споров, статических методов, веб -приложений и т. Д.?

Заранее спасибо, Алексей Блю.

Это было полезно?

Решение

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

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

Другие советы

Лучше всего закрыть весь обработчик открытых файлов в одной и той же сфере. Например, когда File outputStream открыт методом, он также должен быть закрыт в этом методе. Это также предотвращает большую часть проблемы параллелизма (но не всегда). Тем не менее, есть много исключений, чтобы не делать этого, но отслеживание и закрытие всего обработчика файлов было бы сложнее в этом случае.

К вашему сведению, существует метод закрытия, который делает именно то, что вы описываете в Apache Common IO, Ioutils. Анкет Это популярная библиотека, которую вы можете использовать.

Это обычная практика, например, посмотрите на ближайший класс в гуаве. Кстати, вам нужен только один метод, чтобы иметь возможность закрыть практически все в Java:

public static void closeQuietly(Closeable closeable) {
  if (closeable != null) {
    try {
      closeable.close();
    } catch (RuntimeException re) {
      // Do something or ignore...
    }
  }
}

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

В общем, это не вызовет споры, если вы не попытаетесь читать из потока в Thread-A, где Thread-B закрывает поток. Но если бы это было так, то у вас будет это утверждение с или без этого рефакторинга. Исключительно этот рефакторинг не введет ни одного дополнительный раздор

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top