Esaminare le nuove funzionalità di concorrenza Java (nello java.util.concurrent
package) che sono state aggiunte in Java 5. Fornisce funzionalità di livello più elevato rispetto al normale Thread
s che renderà più semplice (e meno soggetto a errori) a scrivere applicazioni concorrenti. Il Lesson: Concurrency di The Java Tutorials sarebbe un buon punto di partenza.
Finora, ho usato solo la ExecutorService
, che permette in grado di produrre thread pools, a cui nuovi compiti possono essere consegnati in unità di Runnable
s o Callable
s (cosa che può riportare i valori dopo l'esecuzione come Future
s), e l'attuale codice di threading è gestito dallo ExecutorService
.
Ad esempio, eseguendo un calcolo utilizzando un pool di thread di 2 fili, e ottenendo il risultato può essere semplice come:
ExecutorService es = Executors.newFixedThreadPool(2);
Future f1 = es.submit(new Callable<Integer>() {
public Integer call()
{
// Do some processing...
return someInteger;
}
});
Future f2 = es.submit(new Callable<Integer>() {
public Integer call()
{
// Do some processing...
return someInteger;
}
});
Integer firstInteger = f1.get();
Integer secondInteger = f2.get();
Nel codice precedente (non testato), tutto devo preoccuparsi è fare un paio di Callable
se submit
e portarlo allo ExecutorService
e in seguito, usando lo Future
s per recuperare il risultato.
Il problema è che, una volta chiamato il metodo get
di Future
, se l'elaborazione non è completa, il programma si interromperà fino a quando il risultato dello Future
può essere recuperato. Pertanto, in questo esempio, anche se il risultato di f2
è disponibile prima dello f1
, il programma attenderà fino a quando il risultato di f1
non sarà disponibile.
In termini di materiale di lettura, sul mio elenco di libri per l'acquisto a breve è Java Concurrency in Practice di Brian Goetz, che si presenta spesso quando viene presentata la concorrenza in Java.
La pagina Concurrency Utilities dalla documentazione di Java 5 ha anche ulteriori informazioni.
Chi pensa che questa domanda non sia costruttiva? È costruttivo. – Xofo