2011-11-28 19 views
10

Voglio lavorare su multi-threading, ma il mio progetto attuale non ha tali opportunità. Qualcuno mi prega di guidarmi dove dovrei iniziare. Ho bisogno di scenari in tempo reale in modo che io possa direttamente saltare sulla codifica. Sto leggendo anche l'uno accanto all'altro.Java Multi Threading - casi d'uso del mondo reale

Potete per favore fare riferimento ad alcuni siti Web per esercitarvi.

+1

http://stackoverflow.com/questions/ 1835076/small-project-to-learn-java-threads Penso che questo collegamento possa essere d'aiuto per – vinay

+0

+1 per un buon puntatore. – inder

+0

Mi piace quel link, esp. il suggerimento di un'app client-server. @Suman_Sohal, se sei incline matematicamente, le operazioni con matrici, come la moltiplicazione, sono dei classici per imparare il multithreading. – user949300

risposta

7

Google può trasferirti a esercitarti in siti web di tutorial (molto meglio di me). Un bel scenario tempo reale potrebbe includere uno dei seguenti (può sembrare accademico, ma le competenze sono assolutamente trasferibili alla pratica): problema

  1. Sala del filosofo.
  2. Problema di lettore/scrittore.
  3. Problema consumatore/produttore.

Alcuni quelli più specifici:

  1. Concurrent ricerca alfa-beta (questo è seriamente difficile).
  2. Qualsiasi algoritmo genetico può essere implementato contemporaneamente e dal momento che la memoria/archiviazione sono condivisi tra i thread, può essere abbastanza difficile se eseguita correttamente (prova il poligono semi-trasparente disegnando un progetto immagine. Puoi cercare google per quello).
  3. L'accesso simultaneo al database può essere piuttosto interessante. Disegna uno scenario per te stesso.
  4. Dai uno sguardo allo http://projecteuler.net/ che include un sacco di problemi interessanti. Molti dei problemi possono essere implementati usando i thread.

Divertiti.

1

Vorrei dare un'occhiata alla libreria disruptor. Questo introduce molti concetti avanzati di multi-threading e una volta compreso e possibile utilizzarlo, ne saprete più della maggior parte su questo argomento.

+0

Se il richiedente vuole conoscere il threading, questa libreria potrebbe essere un po 'troppo. I concetti e l'implementazione sono abbastanza avanzati. –

+0

@RobertMunteanu, non è un buon punto di partenza come suggerisci, ma se vuole testare la sua comprensione del multi-threading, potrebbe essere d'aiuto. –

+1

Consiglio assolutamente il video! http://www.infoq.com/presentations/LMAX –

1

Ci sono diversi problemi con Java che richiedono semplicemente una soluzione multi-thread. Due Ho colpito di recente e risolto stati:

  • File.list ha problemi orribili se ci sono molte migliaia di file nella cartella.
  • SAXParser.parse è un parser di push. Molti utenti di xml preferiscono un parser di pull, ma preferiscono non aggiungere ancora un'altra libreria.

Entrambi questi possono essere aiutati considerevolmente utilizzando una semplice soluzione a due thread.

Nel caso di File.list, eseguire il File.list in un thread separato con uno speciale FileFilter che i messaggi di tutti i file presentati ad esso per un BlockingQueue. Un iteratore su BlockingQueue può quindi essere utilizzato per consegnare i file al chiamante. Un miglioramento per elencare la directory in modo ricorsivo è un'aggiunta semplice se il codice è scritto correttamente.

Il SAXParser.parse può essere ruotato all'interno come in un modo simile.

Ho fatto entrambe queste cose di recente e ho trovato l'esperienza molto illuminante.

0

ti consiglierei di progettare seguente sistema di iniziare con il tema:

  1. ascensore (3 in prima fila), mantenendo i seguenti parametri in considerazione:

    consumo energetico cioè l'ascensore più vicino prenderà la tua richiesta a seconda se si sta spostando verso l'alto o ora e la richiesta dell'utente, peso sull'ascensore

    Consumo di tempo.

  2. lettore di file e il sistema di scrittore in cui più utenti possono:

    Edit/Write/Search/Delete a file

0

Multi-threading simulato da fili a livello utente. Questi thread sono implementati a livello di applicazione non a livello di kernel OS.

Questi thread hanno anche chiamato fili verdi perché, così freschi (nuovi di zecca) e giovani (non maturi o maturi).

casi d'uso mondo reale

  • In Computer Games, oggetti come automobili, moto ecc Essi sono solo discussioni.
  • La comunicazione asincrona può consentire a un'applicazione di eseguire attività aggiuntive anziché attendere il completamento delle attività.
  • Le applicazioni con un numero di attività che è possibile eseguire in qualsiasi ordine possono spesso trarre vantaggio dalla comunicazione asincrona distribuita.
0

Quando il thread singolo impiega molto tempo per completare un'attività computazionale, è necessario suddividerlo in piccole attività e utilizzare il multithreading per ridurre i tempi di calcolo.

È possibile visualizzare molti casi d'uso per il multi-threading nel progetto.

  1. Dove alcune operazioni possono funzionare in modo indipendente con-out a seconda di altre attività (solo abbracciare un nuovo Thread oo presentati Runnable/Callable compiti a ExecutorService/ThreadPoolExecutor)
  2. Quando è necessario attendere il completamento di più attività in parallelo di procedere con attività successiva (invokeAll())

    es. L'attività 1 avvia tre attività indipendenti Attività 2, Attività 3 e Attività 4 ma l'Attività 5 deve iniziare dopo il completamento di Attività 2, Attività 3 e Attività 4.

Task 1    
----->    
     Task 2 
     -----> 
     Task 3 
     -----> 
     Task 4 
     -----> 
        Task 5 
--------------------------> 
  1. System è in grado di utilizzare molteplici core di CPU
  2. Quando si dispone di casi d'uso come fork-join compiti (uso : ForkJoinPool)
  3. Quando si desidera visualizzare l'avanzamento dell'attività di calcolo lungo (la barra di avanzamento può essere visualizzata in un thread e il calcolo lungo compito può essere eseguito da un altro thread)

Related posts:

How to properly use Java Executor?

Whether to use invokeAll or submit - java Executor service

Java's Fork/Join vs ExecutorService - when to use which?

wait until all threads finish their work in java