在最近的一次採訪中,我被要求實現一個Queue
,它允許一次僅訪問四個線程。任何請求訪問的進一步線程都應該排隊,並且應該根據它們排隊的順序給予訪問優先級。我想出了以下Queue
的實現,但是無法想出代碼的多線程部分。實現只有n個線程訪問的隊列 - 休息應該排隊
public class Queue<Item> implements Iterable<Item> {
private int N; // number of elements on queue
private Node<Item> first; // beginning of queue
private Node<Item> last; // end of queue
private static class Node<Item> {
private Item item;
private Node<Item> next;
}
public Queue() {
first = null;
last = null;
N = 0;
}
public boolean isEmpty() {
return first == null;
}
public int size() {
return N;
}
public Item peek() {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
return first.item;
}
public void enqueue(Item item) {
Node<Item> oldlast = last;
last = new Node<Item>();
last.item = item;
last.next = null;
if (isEmpty()) first = last;
else oldlast.next = last;
N++;
}
public Item dequeue() {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
Item item = first.item;
first = first.next;
N--;
if (isEmpty()) last = null;
return item;
}
}
如何保證一次只能訪問隊列中的n
線程?
此外,請建議一些好的讀取,它們有這些問題,以便我可以在Java的多線程部分工作。
這是它的一部分,但一個線程可以給其他線程參考 - 你如何阻止其他線程使用隊列? – Bohemian 2015-03-03 06:11:58
仍然使用上述解決方案,我應該在哪裏放置代碼? – OneMoreError 2015-03-03 06:18:05
在4線程後開始的*線程*將在哪裏? – TheLostMind 2015-03-03 06:19:28