java 线程安全问题
- Java code
package com.cfd.drp.client;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.cfd.drp.utils.Utils;public class ClientManager { StringBuffer sb = new StringBuffer(); private static ClientManager manager = new ClientManager(); private ClientManager() {} public static ClientManager getInstance() { return manager; } public String showTree() { Connection connection = null; sb.delete(0, sb.length()); try { connection = Utils.getConnection(); tree(connection,0,1); }catch(Exception e) { e.printStackTrace(); }finally { Utils.close(connection); } return sb.toString(); } public void tree(Connection connection,int id,int level) throws SQLException { String sql = "select * from t_client where pid = ?"; int i= 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = connection.prepareStatement(sql); ps.setInt(1, id); rs = ps.executeQuery(); while (rs.next()) { sb.append(rs.getString("name")+"<br>"+"\n"); if(rs.getString("is_leaf").equals("N")) { tree(connection,rs.getInt("id"),level); } } }finally { Utils.slose(rs); Utils.close(ps); } }}这个问题是尚学谈DRP项目中的:
正常运行的结果应该是:
所有分销商
华北区
北京
北京市医药股份有限公司
东北区
吉林省
辽宁省
黑龙江省
下面是jsp页面的内容,这样也页面的内容和简单 就是把上面的字符串显示出来就是了:
- HTML code
<% ClientManager manager = ClientManager.getInstance(); out.print(manager.showTree()); %>
但是当我快速刷新页面的时候却就出现问题了。结果变为了,【只有快速刷新的时候才会出现】
所有分销商
华北区
北京
北京市医药股份有限公司
东北区
吉林省
辽宁省
黑龙江省
所有分销商
华北区
北京
北京市医药股份有限公司
东北区
吉林省
辽宁省
黑龙江省
刷新的速度不一样 字符串重复的次数就不一样 请高手指教!谢谢了
[解决办法]
一个单例模式的典型错误应用
1 如下的代码只有一份,属于实例级的属性
- Java code
StringBuffer sb = new StringBuffer();