주요 역할은 클래스는 하나의 인스턴스 만 존재가, Java 프로그램에서 그 싱글 톤 패턴을 보장하는 것입니다. 싱글은 많은 장점을 가지고, 그것은 중복 인스턴스를 생성 방지 할 수있다, 또한 메모리 공간을 절약 할 수, 생성 된 각 개체의 시간 비용을 줄일 수 있습니다뿐만 아니라, 논리 오류는 원인의 여러 인스턴스의 작동을 방지 할 수 있습니다.
객체가 전체 응용 프로그램을 통해 가능하지만, 또한 글로벌 통합 관리 제어의 역할을한다면, 싱글 톤 패턴을 고려해야 할 가치 옵션이 될 수 있습니다. 일부 관리자와 컨트롤러는 종종 싱글로 설계되어 있습니다.
1을 달성 일반
공공 클래스 SingletonClass { 개인 정적 최종 SingletonClass INSTANCE = 새로운 SingletonClass (); 개인 SingletonClass () { } 공공 정적 SingletonClass의 getInstance () { 반환 인스턴스; } }
반사 싱글을 파괴하여 --- AccessibleObject.setAccessible 방법으로, 개인 생성자를 호출
열거 2- 달성
공공 열거 EnumSingleton { INSTANCE; 공공 문자열 기타 () { 반환 "기타" ; } }
--- 사용 열거 속성
3- 정적 내부 클래스 달성
공용 클래스 싱글 { 개인 정적 클래스 SingletonHolder { 개인 정적 최종 싱글 INSTANCE = 새로운 싱글 (); } 개인 싱글 () {} 공용 정적 최종 싱글의 getInstance () { 반환 SingletonHolder.INSTANCE 단계; } }
---
예 단일 테스트 클래스 :
클래스 SingletonTest이 구현 된 Runnable { 개인 정적 CountDownLatch를 래치 = 새로운 CountDownLatch를 (1 ); 정적 세트 <문자열> = 설정된 새로운 ConcurrentSkipListSet <문자열> (); @Override 공공 무효 실행 () { 시도 { ) latch.await (; } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } set.add (SingletonClass2.getInstance의 toString () ().); } 공공 정적 무효 메인 (문자열 []에 args)슬로우 예외 { 위해 ( INT에서 , K <2000; K = 0 k는 ++ ) { SingletonTest TT = 새로운 SingletonTest (); 스레드 t = 새로운 스레드 (TT); t.start (); } // 释放锁 latch.countDown (); Thread.sleep를 ( 2000 ); 에서 System.out.println (set.size ()); } }
---
종료
HTTPS : //www.cnblogs.com/luangeng/p/5837719.html 재현