2011-06-15 2 views
0

P2P 아키텍처의 멀티 플레이어 카드 게임을 개발 중입니다. 내 결정이 아닙니다.이 프로젝트는 내 대학의 분산 시스템 코스 교수가 위임했습니다.Java RMI : 동시성 지원

교수가 부과하는 또 다른 제한 조건은 Java RMI 기술을 사용하여 플레이어 간의 통신 레이어를 구현하는 것입니다.

Java RMI가 동시성을 "즉시"관리하는지, 즉 원격 객체에서 메소드를 호출 할 때 객체가 자동으로 "잠겨"있고 객체가 동시에 호출 할 수 있는지 알 수 있습니다. 같은 방법.

동기화 된 메소드를 좋은 해결책으로 선언 할 수 있습니까?

감사합니다.

+0

RMI 공급자에 따라 다름 ...하지만 기본값은 멀티 스레드이므로 동일한 메소드를 동시에 호출 할 수 있습니다. 즉, 나는 맹목적으로 방법을 동기화하는 것은 어리석은 일이라고 생각합니다. 보호되어야하는 것은 * 객체 *와 * 사용법입니다. –

+0

단일 스레드 된 RMI 공급자가 없다고 주장합니다. RMI 사양은 기본적으로 단일 스레드라고 가정 할 수 없으므로 스스로 동기화해야합니다. 또한 실제로 RMI 제공자 인 RMI가 SPI 아키텍처를 가지고 있지 않다는 것을 주장한다. 전체 JDK의 구현 만있다. – EJP

답변

2

를 살펴 보자.

동기화 할 메소드를 선언하는 것은 액세스를 제어하는 ​​한 가지 방법입니다. 그러나 단순히 모든 원격 접근 가능 객체에 대한 모든 메소드를 동기화하도록 선언하는 것은 나쁜 생각입니다. 실제로 수행중인 작업의 세부 사항에 따라 불필요한 병행 병목 현상 및/또는 deadlocks의 위험을 초래할 수 있습니다. 당신은 객체와 상호 작용의 행동에 대해 더주의 깊게 생각할 필요가 있습니다.

1

여러분의 방법을 동기화하는 것이 좋습니다. 이 작업을 수행 할 때 성능이 저하 될 수 있지만,이 경우에는 문제가 없습니다.

개체를 고정하지 않는 원격 객체의 메소드를 호출이 Java RMI and synchronized methods