Problem Statement
There are two kinds of threads, oxygen and hydrogen.
In order to assemble these threads into water molecules, we have to create a barrier that makes each thread wait until
a complete molecule is ready to proceed.
As each thread passes the barrier, it should invoke bond. You must guarantee that all the threads from one molecule
invoke bond before any of the threads from the next molecule do.
In other words:
• If an oxygen thread arrives at the barrier when no hydrogen threads are present, it has to wait for two hydrogen
threads.
• If a hydrogen thread arrives at the barrier when no other threads are present, it has to wait for an oxygen thread
and another hydrogen thread.
Write synchronization code for oxygen and hydrogen molecules that enforces these constraints.
Description
To encapsulate the functioning of the barrier, we have used the CyclicBarrier
class from the java.util.concurrent
package.
It is a synchronization aid that can synchronize threads progressing through some algorithm.
CyclicBarrier
is used to make threads wait for each other.
It is used when different threads process a part of computation and when all threads have completed the execution, the
result needs to be combined in the parent thread.
After completing its execution, threads call await() method and wait for other threads to reach the barrier.
Once all the threads have reached, the barriers then give the way for threads to proceed.
CyclicBarrier
s are useful in programs involving a fixed sized party of threads that must occasionally wait for each
other.
The barrier is called cyclic because it can be re-used after the waiting threads are released.
Solution
We have used the following variables in our solution: