Dining Philosopher's problem implementation with Java Locking Framework to avoid deadlock
Your implementation is minimalistic but it does what it does and it does it good.

Your code consists basically of three elements:


Setup the place
Logging actions of the philosophers
Handling philosopher behaviour


1 and 2 are not that interesting as they may differ slightly from implementation to implementation. And in general you did not reach a code mass to address any modularization issues.

Number 3 is the part I want to address. You chose the egoistic variant of the dining philosophers. A philosopher may face starvation if other philosophers keep taking the forks in unfavorable point of times.

Another variant is cooperative. You have to introduce one more artefact to do so. Philosophers may give aquired forks directly to their neighbors if they registered for usage of a fork while the fork itself is currently unavailabe. This prevents a philosopher from releasing the fork and aquiring it again immediately so other philosophers have no chance to introduce themselves in the process.