여기 내 문제가 있습니다 ...은 인스턴스를 공유하지만 모든 새로운 프로세스에 대해 새로운 것을 생성합니다.
- 스타터, 데이터베이스 및 스케줄러 및 테스트 클래스가 4 개 있습니다.테스트 클래스는 (전체 프로세스를로드하고 시작하는) 스타터의 새 인스턴스를 만듭니다. 스타터는 스케줄러 및 데이터베이스 클래스를 초기화합니다.
테스트 클래스는 데이터를 초보자에게 전달합니다. Starter는이를 Database 클래스의 HashMap에 저장합니다. 스케줄러는 데이터베이스 클래스에서 과 동일한 HashMap을 읽습니다. 이제
가 동일한 HashMap의 내 자바 프로젝트 전반에 걸쳐 모든 클래스에 의한 액세스가 있는지 확인하기 위해, 나는 2 options--이되는 HashMap에게 정적를하거나 데이터베이스 싱글 톤 클래스해야한다. 나는 Database를 현재 싱글 톤 클래스로 만들었다. 테스트 클래스이스타터 starterInstance1 = 새로운 스타터 않으면 problem--
();
스타터 starterInstance2 = 새로운 스타터();
어떻게 starterInstance1과 starterInstance2에 Database 클래스 나 HashMap의 인스턴스가 있는지 확인하려면 어떻게해야합니까?
==========
그냥 더 명확되는 :
클래스 테스트 {
스타터 start1 = 새로운 스타터(); // 내 응용 프로그램의 한 인스턴스를 생성
start1.init(); //이 스케줄러 등을 초기화 할 것이다 "getDatabaseInstance()는"
찾는 (I = 0을 나타내는 int 난 < 50; 내가 ++) {,299,start1.sendData ("abc"); //이 50 개의 요청은 모두 데이터베이스 클래스의 HashMap에 저장 될 요청을 보낼 스레드 풀에 제출됩니다. HashMap은 스케줄러 및 다른 클래스에 의해 동시에 액세스됩니다. 모든 클래스가 동일한 DB 인스턴스에 액세스 할 수 있도록 Database 클래스를 싱글 톤으로 만들었습니다.
}
// 마찬가지로 내 응용 프로그램의 다른 인스턴스를 생성
스타터 START2 = 새로운 스타터();
start2.init(); // "getDatabaseInstance()"를 수행하면 위와 같은 인스턴스가 생성됩니다. 하지만이 응용 프로그램 인스턴스에 대해 별도의 데이터베이스를 원합니다. 나는 이것을 어떻게 성취합니까? {
START2
찾는 (; 나는 < 50 난 ++ I = 0 INT).sendData ("abc");}
}
를 데이터베이스 싱글 인 경우, 나는 그들이 다른 인스턴스를 가질 수 표시되지 않습니다. 이것이 싱글 톤 패턴의 핵심입니다. 귀하의 질문 중 하나는 정확한지도가 모든 클래스에 의해 액세스되어야하고 다른 하나는 각각의 시동기 인스턴스가 자신의 인스턴스를 가져야한다고 말합니다. 원하는게 뭐야? –
예 싱글 톤은 인스턴스가 1 개만있는 것을 의미합니다. 그러나 나는 그것을 원하지 않는다. 내 전체 응용 프로그램의 시작 지점은 초보자 클래스입니다. 응용 프로그램의 새 인스턴스 (예 : 새로운 Starter())가 생성 될 때마다 고유 한 데이터베이스와 동일한 데이터베이스에 액세스하는 고유의 스케줄러를 갖기를 원합니다. 데이터베이스를 싱글 톤 (singleton) 클래스로 만드는 것은 새로운 - 모든 Starter() - 동일한 데이터베이스를 사용할 것임을 암시하는 솔루션입니다. 나는 모든 새로운 Starter()가 그것 자신의 Database를 가지기를 원한다. – anzaan