synchronizedについて
こんにちは!質問です!
javaのsynchronizedについて教えてください。
DBへの更新メソッドに、
排他制御をしようと思っているのですが、調べて自分で
コーディングしました。アドバイスをお願いします!
public static synchronized void update() throws SQLException{
Connection db = null;
PreparedStatement objPs = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer();
try {
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:/comp/env/test/sample");
db=ds.getConnection();
sql.append("UPDATE ");
sql.append("test ");
sql.append("SET ");
sql.append("aaa = '000', ");
sql.append("bbb = '000', ");
sql.append("ccc = '000' ");
sql.append("WHERE dd = '0'");
objPs=db.prepareStatement(sql.toString());
objPs.executeUpdate();
} catch (SQLException e) {
//エラー処理
} catch(Exception e) {
//エラー処理
} finally {
try {
if(rs!=null) {rs.close();}
if(objPs!=null){objPs.close();}
if(db!=null) {db.close();}
} catch(Exception e){
e.printStackTrace();
}
}
}
クラスはpublicですが、static synchronized にしていたら、
排他制御が可能でしょうか?
staticなので、インスタンス複数でも1つしか存在しないのですよね?
その場合、このメソッドを呼び出しているスレッドが終了しないうちに
別のスレッドが呼び出した場合、そのスレッドはどうなるのでしょうか?
目で見て確認する方法もできれば、教えていただきたいです!
また、sql発行メソッド(上記メソッド)を直接排他制御するのと、
上記メソッドの呼出元を排他制御するのと、どちらがいいとかって
あるのですか?
ご存知の方、よろしくお願い致しますm(_ _)m