34 lines
		
	
	
	
		
			901 B
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			901 B
		
	
	
	
		
			Java
		
	
	
	
	
	
class QueueFullException extends RuntimeException {}
 | 
						|
class QueueEmptyException extends RuntimeException {}
 | 
						|
 | 
						|
class ThreadSafeQueue<T> {
 | 
						|
    private final Object lock = new Object();
 | 
						|
    private final T[] queue;
 | 
						|
    private int size = 0;
 | 
						|
    private int front = 0;
 | 
						|
    private int rear = 0;
 | 
						|
 | 
						|
    @SuppressWarnings("unchecked")
 | 
						|
    public ThreadSafeQueue() {
 | 
						|
        queue = (T[]) new Object[10];
 | 
						|
    }
 | 
						|
 | 
						|
    public void enqueue(T item) {
 | 
						|
        synchronized (lock) {
 | 
						|
            if (size >= 10) throw new QueueFullException();
 | 
						|
            queue[rear] = item;
 | 
						|
            rear = (rear + 1) % queue.length;
 | 
						|
            size++;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public T dequeue() {
 | 
						|
        synchronized (lock) {
 | 
						|
            if (size == 0) throw new QueueEmptyException();
 | 
						|
            T item = queue[front];
 | 
						|
            front = (front + 1) % queue.length;
 | 
						|
            size--;
 | 
						|
            return item;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |