Quando si utilizza BlockingQueue per consumare i dati prodotti, qual è il metodo più efficiente per attendere che i dati vengano visualizzati?Java: thread consumer consumer qual è il modo più efficiente per attendere la produzione dei dati
Scenario:
Passo lista 1) I dati sarà un archivio dati in cui vengono aggiunti timestamp a. Questi timestamp devono essere ordinati in base alla priorità temporale più vicina. Questa lista potrebbe essere vuota. Un thread inserirà il timestamp in esso. Produrre
Punto 2) Voglio consumare i dati in qui in un altro thread che porterà i timestamp dai dati e verificare se sono dopo il tempo corrente. consumatori poi Produce
Fase 3) Se sono dopo l'ora attuale poi inviarli a un altro thread per essere consumati e trasformati. Una volta che i dati del timestamp vengono elaborati qui, rimuovi dall'archivio dati del passaggio 1. Consumare quindi modificare l'elenco originale.
Nel seguente codice il campo dati si riferisce all'archivio dati nel passaggio 1. Il risultato è l'elenco di timestamp che sono stati inviati dopo l'ora corrente. Fase 2. I risultati verrà poi consumato passo 3.
private BlockingQueue<LocalTime> data;
private final LinkedBlockingQueue<Result> results = new LinkedBlockingQueue<Result>();
@Override
public void run() {
while (!data.isEmpty()) {
for (LocalTime dataTime : data) {
if (new LocalTime().isAfter(dataTime)) {
results.put(result);
}
}
}
}
Domande Qual è il modo più efficace per attendere i dati da aggiungere nella lista di dati che potrebbero essere potenzialmente vuoto? Focus on:
while (!data.isEmpty())
seguito da una precedente question.
Utilizzare 'data.take()! = Null'. La chiamata 'isEmpty' è non-bloccante. – CKing
Sì, beh, che senso ha usare una coda di blocco se la stai sondando? –
Il tuo codice dice '! Data.isEmpty()' che significa che stai eseguendo il ciclo fino a ** ci sono alcuni dati ** nella tua lista di dati (in attesa che i dati vengano consumati). Ma il tuo requisito dice: "* aspetta ** i dati da aggiungere ** nella lista dei dati che potrebbero essere potenzialmente vuoti *." Qual è il tuo requisito qui? – hagrawal