I see a number of big issues in the Java implementation up top. The big no-no is the use of a single thread per-actor, which you simply should never be doing for any kind of serious actor system. Use a thread pool, or better yet make the execution strategy pluggable.
The overloading of wait/notify/notifyAll is probably not a good idea either, since it's too easily confused with the same-named methods on Object, but it's minor compared to that previous one. I think everyone should explore the actor model, try inventing their own, but then look at an industrial-strength implementation and see what they do differently and why.
Thx for pointing that out. I changed it to use a thread pool instead and my performance increased by 6 times. Strangely, the default Scala actors don't seems so fast. For sending and receiving 100000 messages it takes :
Mine : 100 millis (1 micro per message in average)
Scala : 1000 millis (10 micro per message in average)

Only problems is that by default, my thread pool is always running until I close my JVM. Wonder what is the best solution for that;
- adding start()/stop() method to actor and when at least one actor is running the thread pool is running
- manually starting/stopping the thread pool directly in the code
EDIT : Decided to make an ActorSystem like Akka. You can specify which ActorSystem an Actor use and you need to start/stop the ActorSystem.