Implement Java Producer and Consumer with Monitors and performance analysis

Implement in Java consumer producer model using monitors – compatible with book. (page 182) LockedQueue

See the definition of the interface and semantics of operations.

For performance evaluation, the following configuration parameters are suggested:
a) Initial list size. Populate the list initially. Test different sizes as they will generate different operating times. Ex .: 100k, 200k, 300k
b) Maximum list size. Limit the list’s growth to a determined value. Ex: 300k, 500k, 1000k.
c) Distribution of commands. What percentage will we have of adds, reads and removes.
           It is suggested to test with the same frequency. In another situation, increasing reads.
d) Number of executing threads. Vary the maximum allowed by the infrastructure available. It does not make sense to go beyond the number of threads, considering hyper-threading.
e) Execution time and warm-up. Set an initial time where measurements are not sockets. Then start measuring for a duration of the experiment. It is suggested 10 seconds of warmup and 1 minute of experiment. However, these values should
            be investigated empirically.
Metrics to be observed. The following metrics are of interest:
        a) General flow of the system in operations carried out
        b) Flow rate by type of operation.
        c) Average list size.