import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
public class ConcurrentQueue<T> {
private final Queue<T> queue;
private final Object lock;
public ConcurrentQueue() {
queue = new ConcurrentLinkedQueue<>();
lock = new Object();
}
public void enqueue(T item) {
queue.offer(item);
}
public T dequeue() {
synchronized (lock) {
return queue.poll();
}
}
public int size() {
return queue.size();
}
}