Rumah > Soal Jawab > teks badan
我现在想做一个消息队列,一边在不停的放数据,一边在不停的take,怎么保证这个take一直在执行?,是不是要写一个死循环的?还是有别的什么方式?
迷茫2017-04-17 17:53:32
Anggap anda berada dalam mod bersendirian
sementara (benar){
object obj = queue.take();//这里会阻塞的
//去做别的处理
}
PHPz2017-04-17 17:53:32
Secara amnya, keluaran dan pengumpulan data sepadan dengan dua urutan atau proses untuk mencapai tujuan tak segerak dan memaksimumkan pemprosesan. Jadi apa yang anda katakan adalah betul, seseorang terus menambah data dan satu terus mendapat data, tetapi terdapat masalah jika anda menambah data terlalu perlahan atau terlalu cepat, atau data diproses terlalu perlahan atau terlalu cepat, ia akan berlaku kosong atau baris gilir penuh Apabila keadaan ini berlaku, ini bermakna satu pihak perlu menunggu pihak lain menyelesaikan tindakan sebelum meneruskan, yang mengurangkan daya pengeluaran, jadi biasanya terdapat pulangan tamat masa.
Yang berikut ialah baris gilir mesej yang diterima tanpa tamat masa
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;
}
}