@nikesport

Как реализуется jdbc connection в многопточности?

Есть класс server_db_connection возвращающий только один connection и есть класс chek_stream который вызывает и есть еще один класс который запускает поток new Thread (new check_stream()).start(); Вопрос в том что во всех ли потоках будет один экземпляр connection при данной реализации или в каждом потоке разный ?
public class server_db_сonnection {
private static String url = "jdbc:mysql://localhost:3306/upomsk";
private static String password = "ravil";
private static String root = "ravil";
private static Driver driver;
private static Connection connection = null;

public static Connection ServerDB_Connection() {
if (connection == null) {
try {
driver = new FabricMySQLDriver();
DriverManager.registerDriver(driver);
} catch (SQLException e) {
e.printStackTrace();
}

try {
connection = DriverManager.getConnection(url, root, password);
System.out.print("Соединениен прошло успешно");
} catch (SQLException e) {
System.out.print("Соединение не удалось");
}
}
return connection;
}

}

public check_stream(Socket socket) throws IOException, ClassNotFoundException {

Connection = new server_db_connection.server_db_connection();
while (true) {
try {
switch_key();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
  • Вопрос задан
  • 3084 просмотра
Пригласить эксперта
Ответы на вопрос 2
@j_wayne
Зависит от реализации jdbc-драйвера, так что смотрите в его документации.
Часто драйверы бывают thread-safe, но на это полагаться не стоит (лучше положиться на документацию).

Очень правильно в случае нескольких потоков использовать пул соединений.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Конечно один на все треды, у вас же коннекшин описан как статик. Если нужно коннекцию на тред, то используйте ThreadLocal. А еще лучше дополнительно использовать и connection pool типа c3p0 или dbcp (какой из них сейчас моднее н е знаю, но пользовал и тот и тот успешно). Это в значительной мере съэкономит ресурсы и коннекты к базе, например больше будут переиспользоваться prepared statements и кеши со стороны базы. На мускуле это не очень заметно (хотя как сказать), а вот на сайбейсе или оракле даже очень! commons.apache.org/proper/commons-dbcp и www.mchange.com/projects/c3p0
В документации куча примеров по использованию, даже готовые классы и для потоков кажется...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы