Maison > Questions et réponses > le corps du texte
我现在想做一个消息队列,一边在不停的放数据,一边在不停的take,怎么保证这个take一直在执行?,是不是要写一个死循环的?还是有别的什么方式?
迷茫2017-04-17 17:53:32
Supposons que vous soyez en mode autonome
pendant que(vrai){
object obj = queue.take();//这里会阻塞的
//去做别的处理
}
PHPz2017-04-17 17:53:32
Généralement, la libération et la collecte des données correspondent à deux threads ou processus pour atteindre des objectifs asynchrones et maximiser le débit. Donc ce que vous avez dit est vrai, on continue d'ajouter des données et on continue d'obtenir des données, mais il y a un problème si vous ajoutez des données trop lentement ou trop rapidement, ou si les données sont traitées trop lentement ou trop rapidement, cela se produira. est vide ou la file d'attente est pleine. Une fois que cette situation se produit, cela signifie qu'une partie doit attendre que l'autre partie termine l'action avant de continuer, ce qui réduit le débit, il y a donc généralement un retour de délai d'attente.
Ce qui suit est une file d'attente de messages obtenue sans délai d'attente
public Message receive() throws InterruptedException {
synchronized (queue) {
if(queue.isEmpty()){
queue.wait(1000);
}
if(queue.isEmpty()){
return null;//timeout
}
Message message=queue.get(0);
queue.remove(0);
return message;
}
}