SomeModel
클래스의 인스턴스를 생성하는 정적 메서드를 사용하는 Factory
클래스가 주어지면 다중 스레드 환경에서 실행됩니다.내 코드 스레드를 안전하게 만드는 방법은 무엇입니까?
- 시작
- 정지
- createSomeModel
와에있는 state
필드 :
- 는
- 는 을 시작 단열성이
- 는
- 는
- 는
Factory
은 세 가지 방법이있다
public class Factory {
enum State{
shutted, starting, starting_failed, started, shutting, shutting_failed
}
State state;
public static void start(){
// can only be invoked when state=shutted
}
public static void stop(){
// can only be invoked when state=started
}
public static void restart(){
stop();
start();
}
public static SomeModel create(){
// can only be invoked when state=started
}
}
내 요구 사항은 다음과 같습니다 :
여기 Factory
클래스의 현재 디자인의 shutting_failed 종료
create
메소드는 호출 할 수 있습니다 때 state==started
및 start
메서드는 state==shutted || state == shutting_failed
및일 때만 호출 할 수 있습니다.메서드는 state==started|| state == starting_failed
일 때만 호출 할 수 있습니다. 이것이 스레드 동기화 문제와 관련이 있다는 것을 알고 있지만 스레드 지식에 대한 확신이 없습니다. 도와주세요.
'synchronized'블록을 사용하십시오. –
'Factory'는 이것을 위해'static' 메소드를 필요로합니까?모든 응용 프로그램을 통해 'Factory' 인스턴스를 하나만 갖고 싶기 때문에 클라이언트가'start' 메소드를 호출 할 필요가 없습니다. –
@LuiggiMendoza 네, 맞습니다. 정적 메서드를 사용하는 것이 좋지 않습니까? 싱글 톤 패턴을 사용해야합니까? – CaiNiaoCoder