线程和单例问题!
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的实例,但是这个实例被变更过了,如果这个实例有状态的话,状态就不一定正确了。
------解决方案--------------------这也是我对单例模式的疑惑,我想一般情况还是单例的吧,,内存中只有一个实例吧,,