2009-05-04 17 views
9

Sto mirando a conoscere la concorrenza in Java. Attualmente il mio stato di conoscenza è scarso. Sono abbastanza sicuro di sapere cosa significhi "volatile". In un certo senso so cosa significa "sincronizzato". A volte. Non ho mai scritto codice che avvia discussioni o le gestisce. Al di fuori di questo problema, mi sento fiducioso ea casa lavorare in Java.Qualche suggerimento per un programma o un piccolo progetto per conoscere la concorrenza in Java?

Sto cercando suggerimenti per un piccolo progetto o programma che richiederà la comprensione della concorrenza per funzionare correttamente ed efficientemente.

risposta

9

se siete davvero solo iniziando quindi probabilmente il problema produttore-consumatore è un buon modo per iniziare:

http://en.wikipedia.org/wiki/Producer-consumer_problem

Non leggere troppo perché l'articolo di Wikipedia contiene anche una soluzione al problema :-)

+0

+1. IMO questo è uno dei modi migliori per imparare i concetti di threading. – talonx

+0

Oops ... 'ways' = 'examples' – talonx

+0

Ho avuto una rapida occhiata e posso vedere immediatamente che non so come farlo. Quindi va bene il conto e io ci provo - molte grazie! – jjujuma

1

Questo non è un progetto completo ma contiene anche alcuni codici sorgente. Penso che sarebbe bello avere una buona conoscenza del threading.

Threading in Java

2

Se sei un programmatore esperto in qualche modo potrebbe essere interessante per creare un po 'di server per la prescrizione di condividere i prezzi che utilizza il Fix Protocol. Dovrebbe essere in grado di far fronte a diversi clienti (e poi imparare Swing o alcuni web tech) che richiede concorrenza.

Se sei un principiante ti suggerisco qualcosa di più semplice come un thread di produzione con un paio di thread di consumo e otterrai punti extra se puoi mostrare graficamente il processo.

2

Un progetto di apprendimento comune per la concorrenza e il networking è quello di scrivere un programma di chat. È simile al suggerimento del server FIX ma si passa semplicemente del testo.

9

provare un resolver sudoku, con diverse strategie:

  • 3 fili: 1 per righe, 1 per colonne e 1 per sub-piazze
  • 9 fili: 3 per righe (1 infilare ogni 3 righe), 3 per colonne e 3 per sub-piazze
  • 27 filati: 9 per righe (1 filetto ciascuna fila 1), ecc
+4

C'è un ulteriore onere di risolvere un puzzle, che potrebbe distrarre dalla comprensione dei principi della programmazione concorrente. – alphazero

2

Quando ho letto programmi simultanei di programmazione all'università, abbiamo costruito un sistema di videosorveglianza: un PC master che recuperava i dati video da uno o più PC slave con le webcam. Ricordo quel progetto, dal momento che ti ha reso davvero divertente sia la programmazione di rete efficiente, sia i problemi in tempo reale e JNI :)

8

Scrivere un algoritmo moltiplicatore di matrice. Parallelizzalo. Ottimizzalo. Guarda come scala in particolare se hai una macchina multi-core. Quello sarebbe un progetto divertente.

2

Sono d'accordo con @Julien sulla moltiplicazione mtrix. In questo problema il miglioramento causato dall'utilizzo di thread può essere molto più visibile.
Ma come ho fatto @dfa, non sono d'accordo con Sudoku.non è abbastanza sensibile
Per esempio qui è il mio risultato di scrittura Matrix-Mul in discussioni

%  self       
time seconds name  
32.38 10.72 Simple 
21.29 7.05  Tiling 
15.58 5.16  SimpleThread 
9.63  3.19  ThreadTiling 

Questo è il risultato della moltiplicazione di una matrice 1000 * 1000. Puoi facilmente vedere quanto il threading può migliorare la velocità del tuo programma. (La piastrellatura è una tecnica utilizzata per migliorare il colpo di cache)

Successivamente, quando si acquisisce familiarità con la sintassi, è possibile immergersi nei problemi classici. potrebbero essere un po 'più impegnativi, ma può aiutarti a familiarizzare con gli schemi per risolvere i problemi di concorrenza.
Suggerisco di dare un'occhiata a Little book on semaphores. È così completo e può aiutarti a cogliere le idee dietro a questi problemi.

+1

Il libro è davvero molto utile, grazie. –

Problemi correlati