synchronized的中文意思是同步的,在Java语言的它是关键字,可以用来给对象和方法或者代码加锁,当它封锁某一块代码或方法的时候,其他线程是不能访问调用这一块代码或方法的。
示例:
public static synchronized int generate(String tableName){使用Java中synchronized方法解决线程同步问题
String sql = "select value from t_table_id where table_name";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int value = 0;
try{
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,tableName);
rs = pstmt.executeQuery();
if (!rs.next()){
throw new RuntimeException();
}
value = rs.getInt("value");
value++;//自加
modifyValueField(conn, tableName,value);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException();
}finally{
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return value;
}
所以在Java中,synchronized代码锁可以解决线程同步、高并发的问题。但它只是对代码的封锁,并不能真正的做到对数据的加锁,因为在其他的方法里同样可以对同一条数据的增删改查,所以它是不能保证数据的一致性的。并且当另一个非synchronized方法调用这个代码块的时候,将会会发生阻塞。那我们又怎么才能做到数据的正真一致性呢?请看小编的下一篇博客。