线程安全性和性能 - 具有DB访问权限的同步方法

时间:2015-05-19 16:54:11

标签: java database performance thread-safety

我有一个类,其公共方法是同步的(其他一切都是私有的,没有子类)。这是否使线程安全?性能如何 - 如果我在同步方法中拥有数据库访问权限会有多严重?

2 个答案:

答案 0 :(得分:1)

  

这是否使线程安全?

?datetime=2015-05-19&id=abcdef方法有帮助,但它们一次只为一个方法提供线程安全性。例如synchronized是线程安全的,但前提是你只使用一种方法使它变得无用。

即使集合是线程安全的,StringBuffer通常也不是线程安全的,同样,你需要调用多个方法来释放调用之间的锁定。

  

性能如何 - 如果我在同步方法中拥有数据库访问权限会受到多大影响?

一些在完全没有之间的地方。但是,正确性应该首先出现,如果它是错误的,它的速度并不重要。

答案 1 :(得分:1)

答案与往常一样:取决于很多细节。

如果您的类具有在方法调用之间延续的内部状态,则它将不是线程安全的。 -EDIT-如果一个类/对象是线程安全的,从广义上讲,如果由多个线程进行的任何调用序列在实例中创建一个不一致的状态。例如,如果您的类打开了JDBC连接,您可以在没有问题的情况下在调用之间继续该连接,但是如果您从方法中提供所述连接的ResultSet,那将是安全,因为当另一个线程从同一连接请求另一个ResultSet时,ResultSet可能会变得无效 - / EDIT -

如果你采取性能损失首先取决于访问次数在同步部分中实际花费了多少时间,那就是你的数据库有多长访问。