如何在不影响速度的情况下同步java中的方法

Mor*_*anM 0 java

我有一个基于客户端服务器的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)

如何提高应用程序的速度?

The*_*ind 5

同步会创建内存屏障并强制执行先发生关系以确保数据一致性.所有这些都是以牺牲性能为代价的.应使用同步来获得一致的数据.如果您的应用程序需要它,那么您应该使用它.

你可以做的是减少关键部分.即,仅同步可能导致问题的那部分代码.

注意:自java 6更新23以来,引入了Escape Analysis来查找不必要地使用同步的代码部分(以及许多其他内容).因此,JVM可能只是优化您的代码(如果引用没有转义/如果多个线程不访问同步块,那么监视器将不会被锁定..)