停车场的Java信号量

时间:2016-12-28 12:08:26

标签: java multithreading synchronization thread-safety semaphore

我正在尝试制作停车场计划。我有多个线程将汽车对象放入队列,然后放入共享缓冲区。一旦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) {

        }
    }
}

0 个答案:

没有答案