单例模式(Singleton) Java实现
单例模式的实现方式有很多种,在这里介绍最简单的两种。
单例模式能够确保一个类只有一个实例(正常情况我们可以new出一个类的无数个实例),自行提供这个实例并向整个系统提供这个实例。下面介绍单例模式的实现方法:
1. 单例模式有两种实现方式:一种是将类的构造法方法私有化,用一个私有的类变量instance保存类的实例,在加载类时,创建类的实例,并将实例赋给instance,再提供一个工友的静态方法getInstance用于获取类的唯一实例,该方法直接返回instance。另一种是将类的构造方法私有化,用一个私有的类的变量instance保存类的实例,到此为止都与第一种情况相同,但是在加载类时,将null赋给instance而不是创建类的实例,再提供一个类的工友的静态方法getInstance,用于获取类的唯一实例,该方法首先判断instance是否为null,如果为null,则创建实例对象,否则,直接返回instance。
2. 两种方法的区别在于:前者在类被加载时,类的唯一实例就被创建出来了,后者在第一个调用getInstance()方法时,类的唯一实例才被创建,但需要在getInstance()方法的声明中使用synchronized关键字,保证某一时刻只有一个线程调用此方法,如果不使用synchronized关键字的话,就有可能出现有两个线程同时访问getInstance方法,如果此时instance恰好为null,则两个线程都会去创建这个类的实例,这就不符合单例模式的思想了。
代码实现:首先建立一个文件TestSingleton.java,然后将下面的测试代码拷贝到文件中运行。
class OneSingleton {
private static OneSingleton instance = new OneSingleton();
private static int number = 0;
private OneSingleton() {}
public static OneSingleton getInstance() {
return instance;
}
public synchronized int getNumber() {
return number;
}
public synchronized void nextNumber() {
number++;
}
}
class TwoSingleton {
private static TwoSingleton instance = null;
private static int number = 0;
private TwoSingleton() {}
public static synchronized TwoSingleton getInstance() {
if(instance == null) {
instance = new
相关文档:
《Java高级技术》课程简介
1. Java程序设计语言引论
2. Java语言的结构化特性
3.1. Java语言的面向对象特性(1)
3.2. Java语言的面向对象特性(2)
3.3. Java语言的面向对象特性(3)
3.4. Java语言的面向对象特性(4)
4.1. 面向对象设计原则
4.2. 面向对象设计模式示例
5.1. Java的异常处理机制
5.2. Java语言 ......
线程组
在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。简单地说,线程组就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。
可以通过使用如下代码获取此线程所属线程组的名称。
Thread.currentThread().ge ......
解决方法一:(最重要的一种方法)
你看下my.ini,有无
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
然后建立表时,也要用(比如)
DROP TABLE IF EXISTS `Company`;
CREATE &nb ......
很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解。关键的地方是HibernateBaseDao的构造方法中的
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass = (Class)params[0] ......
就是要到sun的网站下载JDK,jdk-6u10-beta-windows-i586-p.exe,我用的是这个。
还是在sun的网站下载WTK,sun_java_wireless_toolkit-2_5_2-windows.exe,我用的这个。
然后就是先安装jdk再安装wtk,我的安装路径是:D:\Java\jdk1.6.0_10和D:\Java\WTK2.5.2
下载eclipse,我用的是:wtp-all-in-one-sdk-R-1.5.5- ......