Equivalente ao canal golang em Java

Eu tenho um requisito no qual preciso ler de um conjunto de filas de bloqueio. As filas de bloqueio são criadas pela biblioteca que estou usando. Meu código precisa ler as filas. Não quero criar um thread de leitor para cada uma dessas filas de bloqueio. Em vez disso, quero pesquisá-los quanto à disponibilidade de dados usando um único thread (ou provavelmente usando 2/3 threads no máximo). Como algumas filas de bloqueio podem não ter dados por muito tempo, enquanto outras podem receber explosões de dados. A pesquisa das filas com tempo limite pequeno funcionará, mas isso não é eficiente, pois ainda é necessário continuar repetindo todas as filas, mesmo quando algumas delas estiverem sem dados por muito tempo. Basicamente, estou procurando um tipo de mecanismo select / epoll (usado em soquetes) nas filas de bloqueio. Qualquer pista é realmente apreciada.

Fazer isso no Go é bem fácil. O código abaixo simula o mesmo com canais e goroutines:

package main

import "fmt"
import "time"
import "math/rand"

func sendMessage(sc chan string) {
    var i int

    for {
        i =  rand.Intn(10)
        for ; i >= 0 ; i-- {
            sc <- fmt.Sprintf("Order number %d",rand.Intn(100))
        }
        i = 1000 + rand.Intn(32000);
        time.Sleep(time.Duration(i) * time.Millisecond)
    }
}

func sendNum(c chan int) {
    var i int 
    for  {
        i = rand.Intn(16);
        for ; i >=  0; i-- {
            time.Sleep(20 * time.Millisecond)
            c <- rand.Intn(65534)
        }
        i = 1000 + rand.Intn(24000);
        time.Sleep(time.Duration(i) * time.Millisecond)
    }
}

func main() {
    msgchan := make(chan string, 32)
    numchan := make(chan int, 32)
    i := 0
    for ; i < 8 ; i++ {
        go sendNum(numchan)
        go sendMessage(msgchan)
    }
    for {
        select {
        case msg := <- msgchan:
            fmt.Printf("Worked on  %s\n", msg)
        case x := <- numchan:
            fmt.Printf("I got %d \n", x)
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion