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/