问题描述
例如这么一个方法public static synchronized Connection getCon() throws Exception{ try{ Class.forName(dirvername); con.DriverManager.getConnection(url); return con; }catch(SQLException e){ System.err.println(e.getMessage()); throw e; } }RT,如果synchronized不加的话,有可能出现哪些场景使程序出错?
解决方案
不用加Class.forName(dirvername); 在加载类时会执行一段static代码,如oracleDriver static { Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0"); try { if (defaultDriver == null) { defaultDriver = new OracleDriver(); DriverManager.registerDriver(defaultDriver); } } catch (RuntimeException localRuntimeException) { } catch (SQLException localSQLException) { } _Copyright_2004_Oracle_All_Rights_Reserved_ = null; }static方法会有类加载器保证 线程安全
解决方案二:
适用于多线程的情况下,多个线程都调用同一个 getCon()方法获取数据库连接的时候,如果不加synchronized的话,会出现问题,比如两个线程获取了同一个连接,这样在后面的事务处理中会互相影响,比如一个线程关闭了连接,但另一个线程正在使用等等。