Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] MultiThread

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    43

    [JAVA] MultiThread

    Ciao a tutti, sto cercando di capire la logica per creare un programma multi thread.
    Facciamo un esempio, ho un programma di questo tipo:
    codice:
    FILE:Test.java
    
    java.io.*;
    public class Test{
    public static void main(String args[])throws IOException{
    
    String a; 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    
    do{
    	a=in.readLine();
    	System.out.println(a);
    }while(!(a.equals("quit")));	
    System.out.println("ciao : )");
    
    }}
    Volevo rendere un programma così banale (dovrebbe funzionare, l'ho scritto direttamente qua senza passare da un editor) a un programma multithread dove un thread mi prende un input da tastiera e un altro thread me lo stampa a schermo.

    So che è inutile in questo caso, ma è semplicemente per capire. Per dargli un senso facciamo che la stampa a schermo è mooooolto lenta e intanto accodo informazioni prese da tastiera per poi stamparle piano piano

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] MultiThread

    Originariamente inviato da youngz
    Volevo rendere un programma così banale (dovrebbe funzionare, l'ho scritto direttamente qua senza passare da un editor) a un programma multithread dove un thread mi prende un input da tastiera e un altro thread me lo stampa a schermo.

    So che è inutile in questo caso, ma è semplicemente per capire. Per dargli un senso facciamo che la stampa a schermo è mooooolto lenta e intanto accodo informazioni prese da tastiera per poi stamparle piano piano
    Ok, ovviamente hai bisogno di creare 2 thread. Conosci già come si definisce il "lavoro" di un thread e come lo si avvia?

    Poi dato che ci deve essere un passaggio di dati da un thread all'altro e visto che, come hai voluto sottolineare, avranno tempistiche differenti, hai anche bisogno di una struttura dati che: a) può accodare più dati (nel tuo caso stringhe) e b) sia "thread-safe" cioè sia appropriata per l'uso da parte di più thread concorrenti. Inoltre ci sarebbe da valutare su quale dei due "lati" si debba o no avere un comportamento "bloccante".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    43

    Re: Re: [JAVA] MultiThread

    Ok, ovviamente hai bisogno di creare 2 thread. Conosci già come si definisce il "lavoro" di un thread e come lo si avvia?
    Se non erro basta creare una classe che estenda Thread e ridefinisco il metodo run() per fargli fare quello che voglio fargli fare. Poi la faccio partire con .start(). Giusto?


    Il vero problema sta dopo , come hai detto te:

    Poi dato che ci deve essere un passaggio di dati da un thread all'altro e visto che, come hai voluto sottolineare, avranno tempistiche differenti, hai anche bisogno di una struttura dati che: a) può accodare più dati (nel tuo caso stringhe) e b) sia "thread-safe" cioè sia appropriata per l'uso da parte di più thread concorrenti. Inoltre ci sarebbe da valutare su quale dei due "lati" si debba o no avere un comportamento "bloccante".
    Non so come fargli scambiare dati, a meno di non creare un Metodo nel Thread 1 e richiamarlo nel Thread 2 passandogli i dati.

    La parte poi che hai segnato nel a),b) e la parte bloccante non so come gestirla

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    43
    Help!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: [JAVA] MultiThread

    Originariamente inviato da youngz
    Se non erro basta creare una classe che estenda Thread e ridefinisco il metodo run() per fargli fare quello che voglio fargli fare. Poi la faccio partire con .start(). Giusto?
    I modi sono due:
    a) Si implementa Runnable in una classe e si istanzia un Thread passando (al suo costruttore) la istanza al Runnable.
    b) Si estende Thread.

    In entrambi i casi c'è appunto un void run() da ridefinire. Tra i due modi, quello preferibile (a livello concettuale ma anche per questioni pratiche) è il primo.


    Originariamente inviato da youngz
    Il vero problema sta dopo , come hai detto te:

    Non so come fargli scambiare dati, a meno di non creare un Metodo nel Thread 1 e richiamarlo nel Thread 2 passandogli i dati.
    Ma così sarebbero troppo "accoppiati". No.

    Cosa conosci delle "collezioni" (le classi in java.util / java.util.concurrent)?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    43
    nada sapresti consigliarmi qualche guida buona, o qualche esempio per poterlo capire meglio?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da youngz
    nada sapresti consigliarmi qualche guida buona, o qualche esempio per poterlo capire meglio?
    Il tutorial ufficiale di Java ha una parte sulle collezioni: Trail: Collections (è in inglese, ovviamente).

    Se vuoi fare qualche prova, usa java.util.Vector. Non offre comportamenti "bloccanti" ma è una collezione "synchronized", è thread-safe in quanto i suoi metodi sono sincronizzati e può essere quindi usata da più thread.
    Vector puoi anche sfruttarlo per fare una coda (non è il massimo, ci sarebbe di meglio ma come ripeto: se vuoi iniziare con qualche prova va bene).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.