cari

Rumah  >  Soal Jawab  >  teks badan

消息队列 - java里面实现MQ的原理是什么?

我现在想做一个消息队列,一边在不停的放数据,一边在不停的take,怎么保证这个take一直在执行?,是不是要写一个死循环的?还是有别的什么方式?

大家讲道理大家讲道理2890 hari yang lalu523

membalas semua(3)saya akan balas

  • 迷茫

    迷茫2017-04-17 17:53:32

    Selesai, saya menulis gelung tak terhingga, terima kasih semua.

    balas
    0
  • 迷茫

    迷茫2017-04-17 17:53:32

    Anggap anda berada dalam mod bersendirian

    sementara (benar){

    object obj = queue.take();//这里会阻塞的
    //去做别的处理

    }

    balas
    0
  • PHPz

    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;
            }
    
        }

    balas
    0
  • Batalbalas