This page has some
demonstrations of the JCSP library.
The library itself is available at http://www.cs.kent.ac.uk/projects/ofa/jcsp/.
First, here is an executable jar file illustrating the Starving Philosopher
Problem. The code itself was
taken from http://www.cs.kent.ac.uk/projects/ofa/java-threads/0.html.
There is a good discussion on this page about the problem in
addition to the sample code. The
short of it, however, is that threads who wait() in a synchronized method lose
hold of the lock, and are put at the back of the line for getting to use the
synchronized method again.
This can be fixed
using basic constructs from the JCSP library. My solution is here.
There are a few
things to note here. The Canteen
class from the original problem has been replaced with a Channel. Also, the Philosopher and Chef classes
no longer extend Thread. The
extent of their synchronization logic is putting data on to the canteenChannel
or getting data from it. This might
not seem like a major point, but it means that the synchronization logic is
much more contained, and therefore easier to test and verify.
Also, I think the
code is now much easier to read.
This is perhaps debatable, but take a look and decide for yourself.