任務是實現我自己的線程安全的消息隊列。Java:實現自己的消息隊列(線程安全)
我的方法:
public class MessageQueue {
/**
* Number of strings (messages) that can be stored in the queue.
*/
private int capacity;
/**
* The queue itself, all incoming messages are stored in here.
*/
private Vector<String> queue = new Vector<String>(capacity);
/**
* Constructor, initializes the queue.
*
* @param capacity The number of messages allowed in the queue.
*/
public MessageQueue(int capacity) {
this.capacity = capacity;
}
/**
* Adds a new message to the queue. If the queue is full, it waits until a message is released.
*
* @param message
*/
public synchronized void send(String message) {
//TODO check
}
/**
* Receives a new message and removes it from the queue.
*
* @return
*/
public synchronized String receive() {
//TODO check
return "0";
}
}
如果隊列是空的,我調用remove(),我想調用wait(),以便其他線程可以使用send()方法。分別,我必須在每次迭代之後調用notifyAll()。
問題:這可能嗎?我的意思是,當我在一個對象的一個方法中說wait()時,我可以執行同一個對象的另一個方法嗎?
而另一個問題:這似乎是聰明的?