Рассмотрим следующий статический помощникДолжны ли эти короткие методы быть синхронизированы в Java?
public class DbUtil {
private static final Logger logger = LogManager.getLogger(DbUtil.class);
public static void closeAll(ResultSet rs, Statement stmt, Connection conn) {
close(rs);
close(stmt);
close(conn);
}
public static void close(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
logger.error(null, e);
}
}
}
public static void close(Statement statement) {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
logger.error(null, e);
}
}
}
public static void close(ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
logger.error(null, e);
}
}
}
public static void closeAny(Object o) {
if(o == null) return;
try {
if (o instanceof Statement) {
Statement stmt = (Statement) o;
stmt.close();
} else if(o instanceof Connection) {
Connection conn = (Connection) o;
conn.close();
} else if(o instanceof ResultSet) {
ResultSet rs = (ResultSet) o;
rs.close();
} else {
logger.warn("Unknown object type");
}
} catch(SQLException e) {
logger.error(null, e);
}
}
}
Этот класс может быть использован множественный поток. Должны ли все его методы быть синхронизированы или некоторые из них и почему?
На самом деле, я не уверен, что после resultSet != null
проверка одним формальным параметром потока изменяется с помощью другого экземпляра объекта другим потоком, и, таким образом, другой ResultSet, Statement или Connection закрываются (в случае методы не синхронизированы).
Где заявление попытка принадлежит? – Crazyjavahacking
Входы, извините, с поправками. – gumkins