Hi, I just wanted to suggest that you may find my recent article that used the
Dining Philosophers as a useful starting point for problems such as this.
I think your general approach is the obvious one. Each actor should be run as a thread performing various activities. I would use the java.util.concurrent facilities to handle coordination between actors. You might want to look at CountDownLatch, CyclicBarrier, Semaphore, and the Lock implementations for example.
Another approach is to use asynch message passing over queues, in which case see ExecutorService, LinkedBlockingQueue, etc. Or take a look at actor-based concurrency models as in Scala actors or Erlang.
And another might be to use a tuple spaces approach, such as JavaSpaces. This is an easy approach to shared data but probably a more complicated approach to coordination.
Alex Miller
Pure Danger Tech