java静态对象和非静态对象有什么区别?
比对如下:
- 静态对象
- 非静态对象
拥有属性:
- 是类共同拥有的
- 是类各对象独立拥有的
内存分配:
- 内存空间上是固定的
- 空间在各个附属类里面分配
分配顺序:
- 先分配静态对象的空间
继而再对非静态对象分配空间,也就是初始化顺序是先静态在开发过程中遇到使用静态变量,将它作为计数标识等作用,除了通过synchronized进行控制外,发现并没有解决在高并发问题。还要在将此类设计为单例模式,在单例模式中对于对象的生成也要加锁(synchronized),这样在外层类进行调用时就可以控制住线程的高并发问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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/