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的实例吗?
private static A instance; private A() {
} public static A getInstance() {
if (instance == null) {
instance = new A();
}
return instance;
}}
当在很短的一段时间内有大量的线程同时调用A.getInstance()方法时,能确保内存中只有一个A的实例吗?
解决方案 »
- JFrame窗口缩小问题
- java 如何实现远程的文件上传下载?
- 想做一个jtable,然后可以根据用户选择来判断需要哪列和哪行
- 会日语,懂应用类软件的人员请进!
- 下面代码 SUPER指代的是什么类 ? 谢谢
- 为什么错误提示是:需要<标示符>?
- 继承了一个jcomponet类生成一个组件,将组件放在一个jpanel中,想要设置组件的tooltiptext
- 50分关于JTextField和线程,在线等
- 怎样才能设置Jtable的列标题的颜色?
- SQL2000能不能够象Access2000那样自动编号?(用触发器行不行?如何做?)
- Tue Jan 01 00:00:00 GMT+08:00 1901 转成一个Date
- javase的开发环境
双cup或多核就可以达到同步运行...一个java程序启动时,最少启动了两个线程 main线程 和 垃圾处理机制
兄弟刚学了点...知道的不多,..
多CPU是可以的当在很短的一段时间内有大量的线程同时调用A.getInstance()方法时,能确保内存中只有一个A的实例吗?
不能确保,因为可能某个线程进入if (instance == null) {判断后,可能CPU被收回了,换下一个线程执行,假设另一个线程,进入if (instance == null)判断后,执行instance = new A(); 然后系统把CPU回收交回给之前的某个线程,那么之前的某个线程会直接执行instance = new A(); 也就像instance = new A(); 可能被执行多次,内存中确实是只有一个A的实例,但是这个实例被变更过了,如果这个实例有状态的话,状态就不一定正确了。
public class A {
private volatile static A instance;
private A() {
}public static A getInstance() {
if (instance == null) {
synchronized(A.class){
instance = new A();
}
}
return instance;
}}
双重枷锁就没事了 也不会影响性能
应该是
public class Singleton{ private static Singleton instance;private Singleton(){};public static Singleton getInstance(){ if(instance==null){synchronized(this)if(instance==null)instance =new Singleton()}return instance;}code]然后就是双锁单例在java中并不适合 第二个instance==null 判断会被编译器认为是不可达代码,会被优化掉。
多线程单例的解决方案 可以使用内部类实现
[code=Java]
public class Singleton {private static class Instance{static final Tax instance=new Single();}private static Singleton instance;private Singleton(){};public static Singleton getInstance(){return Instance.instance;}Instance 是内部类 只被实例化一次所以次解决方案可行。
一般设计模式书上所说的单例都是适合单线程的, 所谓双锁模式是首先在C++社区提出的,但是并不适合java java 中一般可以通过我上面给出的代码实现
多处理机下,多线程是否可以同时运行依据操作系统而定。 一般来说我们的线程都是对应于操作系统中的内核线程,由操作系统调度,有的操作系统会按照进程来分配CPU 也就是,多个线程只能公用一个CPU ,而有的操作系统则是按照线程来调度。
static方法中可以synchronized(this)么?
private static A instance = new A();private A() {
}public static A getInstance() {return instance;
}}