日期:2014-05-20  浏览次数:20680 次

线程和单例问题!
1.在一个时刻点上一个JVM同时运行多个线程吗?

public class A {
private static A instance;

private A() {
}

public static A getInstance() {
if (instance == null) {
instance = new A();
}
return instance;
}

}
当在很短的一段时间内有大量的线程同时调用A.getInstance()方法时,能确保内存中只有一个A的实例吗?

------解决方案--------------------
要看你的电脑是否是双cup或多核 单核的同一时钟点上只有一个线程在运行,它的多线程是交替运行实现的.
双cup或多核就可以达到同步运行...一个java程序启动时,最少启动了两个线程 main线程 和 垃圾处理机制
兄弟刚学了点...知道的不多,..
------解决方案--------------------
在一个时间点上,只有一个线程在运行。是一种并发! 如果你是双核的cpu 就能做到真正的并行了
------解决方案--------------------
1.在一个时刻点上一个JVM同时运行多个线程吗?
多CPU是可以的

当在很短的一段时间内有大量的线程同时调用A.getInstance()方法时,能确保内存中只有一个A的实例吗?
不能确保,因为可能某个线程进入if (instance == null) {判断后,可能CPU被收回了,换下一个线程执行,假设另一个线程,进入if (instance == null)判断后,执行instance = new A(); 然后系统把CPU回收交回给之前的某个线程,那么之前的某个线程会直接执行instance = new A(); 也就像instance = new A(); 可能被执行多次,内存中确实是只有一个A的实例,但是这个实例被变更过了,如果这个实例有状态的话,状态就不一定正确了。



------解决方案--------------------
这也是我对单例模式的疑惑,我想一般情况还是单例的吧,,内存中只有一个实例吧,,