2013-09-27 2 views
2

Java 용 FSM 구현을 많이 보았지만 재사용 가능한 것이 있는지 확실하지 않습니다. 재사용 할 수 있다는 것은 무엇을 의미합니까?스레드 안전 java 유한 상태 기계 (FSM)

여러 상태의 여러 객체에 대한 상태 전이를 처리 중입니다. 분명히 스스로가 상태 비 저장 및 스레드 안전성이 필요한 싱글 톤 상태 머신을 구성하려고합니다. 그래서 모든 주어진 객체를 전달하여 상태 전환을 가능한 한 병렬로 수행 할 수 있습니다.

거기에이 시나리오에 적합한 것이 있는지 궁금합니다.

+1

어떻게 상태 비 저장 머신을 사용할 수 있습니까? 스레드 당 상태 머신을 원합니까? 그럴 경우 싱글 톤이 필요하지 않습니다. –

+0

많은 객체를 병렬로 처리 할 수있는 FSM이 필요합니다. 상태 머신이 여러 객체의 전환을 병렬로 처리하려면 각 프로세스의 데이터를 자체 상태에서 유지해야합니다. 그것이 무국적자의 의미입니다. 그러나이 용어가 최상의 선택이 아니라는 데 동의합니다. – husayt

+0

그걸 스레드 당 상태 머신으로 모델링합니다. 이 방법은 상태가 스레드 로컬이거나 작업 로컬입니다. –

답변

2

이것은 https://stackoverflow.com/questions/10875317/recommended-fsm-finite-state-machine-library-for-java과 중복 될 수 있지만 확실치 않습니다. 이전에 다중 스레드 시스템에서 SMC를 사용했습니다.

당신에게 적합한 간단한 상태 머신은 이와 같이 enum을 사용하는 것입니다.

http://vanillajava.blogspot.com/2011/06/java-secret-using-enum-as-state-machine.html

다시 말하지만, 이것은 내가 처음부터 작성했습니다 방법이다.

+0

아니요, 이것들은 전혀 다릅니다. "동시 가능 또는 다중 스레드 일 필요는 없습니다." – husayt

+2

Java를 사용하여 그 해를 지낸 후에 아마도 JLS를 잘 아는 것만으로도 열거 형 싱글 톤의 익명 클래스를 만들 수 있다는 것을 알았습니다. 루프 방식에서는 표준보다 명확하게 필자를 공격하지는 않지만 재미있는 것은 사실입니다. – Voo

+0

@husayt 두 개 이상의 상태 시스템을 사용하여 동시에 사용할 수 있습니다. BTW'enum '을 사용하여 내가 준 예제는 무국적이다. –