Come leggere da un database e scrivere in un file in modo asincrono / non bloccante in Java

4

Sto provando a modificare un programma seriale che legge da un database e scrive i risultati in un file, questo viene fatto in un blocco e penso che possiamo ottenere un incremento delle prestazioni di un buffer di memoria e avere il file scritto nello "sfondo" in modo asincrono

Posso pensare alla soluzione del "colloquio di lavoro", usando Thread, risorse condivise, blocchi sincronizzati ecc ... ma sono sicuro che c'è un modo migliore (c'è una piccola piccola libreria "delayed write" là fuori che lo farò per me?)

Qualcuno del pacchetto java.util.concurrent offre aiuto? java.nio? o forse JMS / ActiveMQ?

Che ne dici di PipedOutputStream / PipedInputStream come base per il mio buffer?

Come posso implementare un autore di file in ritardo / in background / buffer / non-blocking / asincrono in Java?

    
posta Eran Medan 02.05.2012 - 08:53
fonte

1 risposta

2

È passato un po 'di tempo, ma forse questo articolo su JSR 203 può offrire alcune indicazioni. Un esempio di ciò che potresti essere dopo è dato come:

AsynchronousFileChannel channel = AsynchronousFileChannel.open(Paths.get("Path to file"));
ByteBuffer buffer = ByteBuffer.allocate(capacity);

Future result = channel.write(buffer, 100); // Write capacity bytes to the file starting at position 100

boolean done = result.isDone(); //Indicate if the result is already terminated
// Alternatively...
int bytesRead = result.get(); // You can also wait for completion

Ovviamente, prima di scendere su questa rotta dovresti considerare che non stai indulgendo in ottimizzazione prematura . Assicurati di avere la prova che un'operazione asincrona può davvero avvantaggiare la tua applicazione.

    
risposta data 16.05.2012 - 23:59
fonte

Leggi altre domande sui tag