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

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/

发表评论