多线程下实现单例模式

来源:互联网 发布:电子音乐制作软件下载 编辑:程序博客网 时间:2024/06/10 03:22

先上一段代码

public class sington implements Runnable {/** * @param args */public static void main(String[] args) {sington s1 = new sington();sington s2 = new sington();sington s3 = new sington();sington s4 = new sington();sington s5 = new sington();// TODO Auto-generated method stubThread thread1 = new Thread(s1);Thread thread2 = new Thread(s2);Thread thread3 = new Thread(s3);Thread thread4 = new Thread(s4);Thread thread5 = new Thread(s5);thread1.start();thread2.start();thread3.start();thread4.start();thread5.start();}public void run() {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName() + " "+ SingletonPattern.getInstance().toString());}}class SingletonPattern {private static SingletonPattern instance;private SingletonPattern() {}public static synchronized SingletonPattern getInstance() {if (instance == null)instance = new SingletonPattern();return instance;}}

总结:



  • 从上面的示例代码中可以看出,一个单例类有一个静态的属性来保存它唯一的实例
  • 需要将类的构造方法设置为private。这样你不允许其他任何类来创建单例类的实例,因为它们不能访问单例类的构造方法。
  • 因为其他类不能实例化单例类,那么我们如何使用它呢?答案就是单例类需要提供服务来对外提供类的实例,如上面的getInstance方法。
  • 当在多线程环境下使用单例类的时候,我们需要确保创建的过程不会创建出多个实例,因此我们添加了synchronized关键字来保护类的创建过程,以保证只有一个实例被创建。

  • 从上面的示例代码中可以看出,一个单例类有一个静态的属性来保存它唯一的实例
  • 需要将类的构造方法设置为private。这样你不允许其他任何类来创建单例类的实例,因为它们不能访问单例类的构造方法。
  • 因为其他类不能实例化单例类,那么我们如何使用它呢?答案就是单例类需要提供服务来对外提供类的实例,如上面的getInstance方法。
  • 当在多线程环境下使用单例类的时候,我们需要确保创建的过程不会创建出多个实例,因此我们添加了synchronized关键字来保护类的创建过程,以保证只有一个实例被创建。
  • 0 0
    原创粉丝点击