Esempio multithreading in java 8

di il
6 risposte

Esempio multithreading in java 8

Come da titolo, potreste indicarmi un esempio di multithreading in java 8 ?

Quelli che ho trovato hanno problemi, perchè sto usando Netbeans e la jdk1.8
Mi servirebbe un esempio di utilizzo dell' Executor e di lambda


SAluti

6 Risposte

  • Re: Esempio multithreading in java 8

    manuel__89 ha scritto:


    potreste indicarmi un esempio di multithreading in java 8 ?
    Puoi essere più preciso? "multithreading" riferito a quale contesto e per che cosa?
  • Re: Esempio multithreading in java 8

    Ciaooooo... allora spiego tutto bene.
    Vorrei giocare un po con i thread, vorrei imparare a creare un pool di thread, per esempio 2 che vadano ad eseguire 5 operazioni
    visto che i thread sono 2 posso vedere come vanno in coda e come funzionano ecc...

    Parte il primo thread ed esegue il metodo Uno(), parte il secondo ed esegue il metodo Due(), cosi che i metodi tre() e quattro() e cinque() rimangano in attesa, il primo thread che si libera li prende in carico e cosi via... i metodi possono benissimo stampare una semplice stringa, quello che è importante è che i thread vadano a processare qualcosa.
    Posto un piccolo pezzo di codi che ho iniziato a fare, in questo caso i thread partono, ma non posso fargli controllare qualcosa, ad esempio lanciare un metodo ecc...

    package multithreading;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.stream.IntStream;
    
    public class Multithreading {
    
        public static void main(String args[]) {
            ExecutorService service = Executors.newFixedThreadPool(2);
            IntStream.range(0, 5).forEach(i -> service.submit(new Task(i)));
        }
    }
    
    final class Task
            implements Runnable {
    
        private int taskId;
    
        public Task(int id) {
            this.taskId = id;
        }
    
        @Override
        public void run() {
            System.out.println("Task ID : " + this.taskId + " performed by "
                    + Thread.currentThread().getName());
        }
    }
    
  • Re: Esempio multithreading in java 8

    Ho risolto in questo modo, se avete suggerimenti ne prendo atto con piacere
    package multithreading;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.stream.IntStream;
    
    public class Multithreading {
    
        public static void main(String args[]) {
            ExecutorService service = Executors.newFixedThreadPool(2);
            IntStream.range(0, 10).forEach(i -> service.submit(new Task(i)));
        }
    }
    
    final class Task implements Runnable {
    
        private int taskId;
    
        public Task(int id) {
            this.taskId = id;
        }
    
        @Override
        public void run() {
            System.out.println("Task ID : " + this.taskId + " performed by " + Thread.currentThread().getName());
            
            switch (this.taskId) {
                case 1:
                    System.out.println("AAAAAA");
                    break;
                case 2:
                    System.out.println("BBBBBB");
                    break;
                case 4:
                    System.out.println("CCCCCC");
                    break;
            }
            
        }
    }
    
  • Re: Esempio multithreading in java 8

    manuel__89 ha scritto:


    Ho risolto in questo modo, se avete suggerimenti ne prendo atto con piacere
    Tecnicamente mi pare corretto. L'uso del IntStream.range e forEach è secondario/superfluo, nel senso che bastava il classico for per indice. Ma se ti va di farlo con gli stream, ok.
    C'è però un problema. La tua applicazione, così come l'hai scritta, non termina. Resta "su" per via del thread pool. Dovresti fare uno shutdown() sul ExecutorService dopo il submit di tutti i task.
  • Re: Esempio multithreading in java 8

    Grazie, infatti l'applicazione rimaneva in run ora ho risolto...
    service.shutdown();
  • Re: Esempio multithreading in java 8

    Dovresti cercare argomenti come "Parallel Programming Patterns".

    Per esempio, puoi implementare un giochino molto interessante: preda / predatore.

    Il gioco si svolge su una spianata rettangolare, preda e predatore si possono vedere a vicenda,

    il predatore deve PRENDERE la preda, e questo lo fa se si trova ad una distanza inferiore ad un certo EPSILON

    la preda deve evitare di farsi prendere dal predatore, quindi deve scappare, puo' correre piu' velocemente del predatore ma per una distanza inferiore, e, ovviamente, in ogni direzione.

    preda e predatore non possono uscire dalla spianata (immagina dei muri).

    Ok, data l'idea, aggiungici tutto quello che manca.

    DUE thread: uno per la preda, ed uno per il predatore.
Devi accedere o registrarti per scrivere nel forum
6 risposte