我正在尝试制作停车场计划。我有多个线程将汽车对象放入队列,然后放入共享缓冲区。一旦sharedBuffer达到最多50个元素。
问题在于:共享缓冲区达到最大元素数量。我希望线程开始将元素排队到队列中。相反,线程等待信号量打开一个点。
public class Buffer {
private LinkedList queue = new LinkedList();
private Semaphore spots = new Semaphore(50);
public synchronized void put(String car) {
try {
spots.acquire();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
queue.addLast(car);
notifyAll();
}
public synchronized String get() throws InterruptedException {
String t = (String) queue.removeFirst();
spots.release();
notifyAll();
return t;
}
public int getSize() {
return queue.size();
}
}
我的Queue类中的方法,要么将汽车添加到缓冲区,要么在缓冲区已满时将其直接添加到队列中。
public void addToQueue(int queue) {
if (queue == 1 && northQueue<20) {
if(buffer.getSize()==50){
northQueue++;
}else{
buffer.put("Volvo");
}
}
}
public void run() {
while (true) {
// System.out.println("Thread: " + threadNumber);
eq.addToQueue(threadNumber);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}