对于类中静态变量的控制问题

java静态对象和非静态对象有什么区别?

比对如下:
                           静态对象                                非静态对象     
拥有属性:               是类共同拥有的                          是类各对象独立拥有的
内存分配:               内存空间上是固定的                      空间在各个附属类里面分配
分配顺序:               先分配静态对象的空间                    继而再对非静态对象分配空间,也就是初始化顺序是先静态

在开发过程中遇到使用静态变量,将它作为计数标识等作用,除了通过synchronized进行控制外,发现并没有解决在高并发问题。还要在将此类设计为单例模式,在单例模式中对于对象的生成也要加锁(synchronized),这样在外层类进行调用时就可以控制住线程的高并发问题。

public class PubUtil {
    static int mSerialNo = 0;
    
    private static PubUtil pubUtil = null;
    
    public static PubUtil getInstance() {
        if (pubUtil == null) {
            synchronized (PubUtil.class) {
                if (pubUtil == null) {
                    pubUtil = new PubUtil();
                }
            }
        }
        return pubUtil;
    }
    
    public String CreateMaxNo(String businessType, String areaCode ) {
        // 对于类中静态变量的的控制
        // ... ...
        synchronized (this) {
            if (mSerialNo == 100){
                mSerialNo = 10;
            }
            serialNo = (calendar.getTimeInMillis()) * 100 + mSerialNo;
            mSerialNo++;
        }
        // ... ...
    }
}


参考文档:http://devbean.blog.51cto.com/448512/203501/

转载于:https://my.oschina.net/u/225084/blog/280773

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值