我有一个基于客户端服务器的java应用程序.服务器处理来自客户端的所有请求并作出响应.我已经创建了一种在服务器上查询客户帐户的方法,但是有时候服务器返回的帐户信息与客户端请求的帐户无关.几个搜索后,我发现,这可能是线程的问题,所以我决定上解决这一问题的方法添加同步的关键字,但我的问题是,这些应用已经放缓,这是我的代码.
public synchronized List<String> queryCustomer(int AccountNumber) {
List<String> acntinfor = new ArrayList();
ResultSet rs = null;
PreparedStatement pmst = null;
Connection conn = getConnection();
try {
pmst = conn.prepareStatement("Select name,balance from tblaccount where Ac_number=?");
pmst.setInt(1, AccountNumber);
rs = pmst.executeQuery();
if (rs.next()) {
acntinfor.add(rs.getString("name"));
acntinfor.add(rs.getString("balance"));
}
rs.close();
pmst.close();
} catch (Exception e) {
e.printStackTrace();
}
return acntinfor;
}
public Connection getConnection() {
// db is class that has connection to my db
DB b = DB.getDB();
return b.getConnetion();
}
Run Code Online (Sandbox Code Playgroud)
如何提高应用程序的速度?
同步会创建内存屏障并强制执行先发生关系以确保数据一致性.所有这些都是以牺牲性能为代价的.应使用同步来获得一致的数据.如果您的应用程序需要它,那么您应该使用它.
你可以做的是减少关键部分.即,仅同步可能导致问题的那部分代码.
注意:自java 6更新23以来,引入了Escape Analysis来查找不必要地使用同步的代码部分(以及许多其他内容).因此,JVM可能只是优化您的代码(如果引用没有转义/如果多个线程不访问同步块,那么监视器将不会被锁定..)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |