The code below is trying to insert a random value into a circular queue and remove it. However, there are some synchronization issues. I know I can use higher level routines
Because java.lang.Object#wait
, java.lang.Object#notify
, java.lang.Object#notifyAll
must be called from synchronized block.
As a solution(need to check) you should put your conditions inside synchronized blocks:
void enqueue(int number) throws InterruptedException
{
synchronized(lock)
{
if(isFull())
lock.wait();
array[rear] = number;
System.out.println("Rear is:"+ rear+ "value is:"+number+"Size is:"+size);
rear = (rear+1)%size;
count++;
lock.notify();
}
}
void dequeue() throws InterruptedException
{
synchronized(lock)
{
if(isEmpty())
lock.wait();
int retVal = 0;
retVal = array[front];
System.out.println("Front is:"+ front+ "value is:"+retVal);
front = (front+1)%size;
count--;
lock.notify();
}
}