Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143

    [Java] Creare più Thread

    Ciao, ho un po' di difficoltà con i thread:
    ho un array di oggetti, che può essere di lunghezza variabile, e vorrei che esistesse un thread per ognuno degli oggetti dell'array in modo che i singoli thread poi facciano delle elaborazioni su tali oggetti. Non riesco a capire come poter creare i vari thread.
    Qualcuno ha qualche consiglio?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    a grandi linee
    public class MyThread extends Thread {
    public MyThread(Object o) {
    ...
    }
    }
    public class Generator {
    public void create() {
    Object[] obj = ...;
    for (Object o : obj) {
    MyThread t = new MyThread(o);
    t.start();
    }
    }
    }
    ammesso che il thread debba avere l'oggetto per farci qualche operazione
    poi il run lo implementi tu

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

    Re: [Java] Creare più Thread

    Originariamente inviato da namek
    Ciao, ho un po' di difficoltà con i thread:
    ho un array di oggetti, che può essere di lunghezza variabile, e vorrei che esistesse un thread per ognuno degli oggetti dell'array in modo che i singoli thread poi facciano delle elaborazioni su tali oggetti. Non riesco a capire come poter creare i vari thread.
    Qualcuno ha qualche consiglio?
    Quando si parla di thread in Java, ci sono due possibili modi per implementarli:
    a) Creare una classe che implementa l'interfaccia Runnable.
    b) Creare una classe che estende Thread.

    In genere è preferibile la prima soluzione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143
    Ciao, forse non ho descritto bene il problema, ho paura che non sia così la soluzione;
    dunque:
    io ho una classe che possiede 2 campi, di cui uno è un array di un certo tipo di oggetti. All'interno di alcuni metodi di questa classe ho la necessità di analizzare per esempio il contenuto, o fare delle operazioni di vario tipo, sugli oggetti dell'array usando i thread.
    Mi viene quindi il dubbio che si debba fare:

    codice:
    implements Runnable
    oppure

    codice:
    extends Thread
    perchè non sto facendo una classe per i thread, ma uso i thread, almeno io capisco così.

    Se per esempio faccio un ciclo for() ad ogni ciclo mi viene ricreato lo stesso thread, con l'i-esimo oggetto, ma se volessi confrontare per esempio quanto è il contenuto di quell'oggetto con gli altri oggetti, come faccio se in pratica ho un thread alla volta?
    Forse non ho molto chiaro "cosa" deve essere fatto, oltre al "come", mi scuso, spero che qualcuno mi sappia dare altri consigli.
    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143
    Ok sono un po' duro a capire , ma ho fatto un passo avanti.
    Ovviamente mi dovevo creare una classe MyThread per elaborare i singoli oggetti dell'array, ci doveva pur essere un costruttore che accettasse quel tipo di dati...

    Come mi è stato suggerito, devo implementare il metodo run(), che poi sarà chiamato da start().
    Però dovrei raccogliere tutti i dati delle elaborazioni dei singoli thread per poi passare il tutto al secondo oggetto della classe, che elaborerà in altri modi questi dati. Ma se il metodo run() non fa il return come faccio per esempio ad immagazzinare i risultati dei thread per poi passarli all'altro oggetto?
    Di esempi in giro per la rete su tale metodo ce ne sono tanti, tutti con istruzioni println(), sleep() ecc.... io invece devo fare delle modifiche.

    Ciao

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    non sono sicuro di aver capito cosa ti serve
    codice:
    public MyThread(Object o) {
      boolean running = false;
      Object data;
      public void run() {
        running = true;
        ...
        running = false;
      }
      public Object getData() {
        return data;
      }
    }
    chi crea il thread fa
    while (t.running) {
      Thread.sleep(100); // aspetta
    }
    Object data = t.getData();

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143
    Essenzialmente la situazione sta in questi termini:
    devo realizzare una classe che estende InputStream,ha quindi i metodi della sua superclasse, e 2 campi, uno è un array di oggetti sempre stream, sottoclassi più specializzate però, l'altro campo è un oggetto che non appena ho preso i dati
    dell'array degli stream gli faccio elaborare le informazioni accumulate.

    Prendiamo per esempio il metodo readByte():
    in questo metodo devo leggere tutti i byte di tutti gli stream dell'array e una volta che ho realizzato un unico grosso array di byte lo passo al secondo campo della classe per ulteriori elaborazioni.

    Io ho capito che, siccome mi viene espressamente specificato che devo usare i thread, mi devo realizzare la mia classe MyThread, che riceverà uno alla volta gli stream dell'array di stream della classe principale. Quindi realizzerò un ciclo for() dentro readByte() per scorrere gli stream e dentro sarà creato un MyThread che elabora l'oggetto passatogli.
    Trovo difficoltà a capire come un singolo thread, perchè in pratica è un singolo thread che lavora in un ciclo for(), possa realizzarmi una struttura dati da passare al secondo campo. In fin dei conti run() non fa return quindi il suo campo Stream cosa mi può dare per poi inserirlo per esempio nella struttura dati da passare al secondo capo?
    Oltretutto dovrei controllare che gli stream abbiamo la stessa quantità di informazione, cioè se realizzo il metodo readByte() dovrò avere che tutti gli stream dell'array di stream hanno gli stessi byte sennò lancio una eccezione. Se però gira un solo thread, da come la capisco io, non capisco come guardo gli altri.

    Spero di essere stato un po' più chiaro
    Ringrazio

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.