Controllo thread

di il
50 risposte

50 Risposte - Pagina 3

  • Re: Controllo thread

    Non ho avuto tempo di rispondere prontamente, mi spiace.

    KuroKami69 ha scritto:


    Ok il tuo codice è un pochino macchinoso
    No, non è poi chissà quanto "macchinoso". Probabilmente non sei ancora abituato a tutti i costrutti di Java e a come combinarli in modo efficace.

    KuroKami69 ha scritto:


    ma vorrei consegnare una soluzione scritta da me
    Nessun problema, il mio codice era solo a scopo esemplificativo.

    KuroKami69 ha scritto:


        private static void minerDispatch(Socket socket) throws IOException
        {
            for(int i = 0; i < 3; i++)
            {
                if(threadArray[i] == null || threadArray[i].getState() == Thread.State.TERMINATED)
                {
                    threadArray[i] = new Thread(new Miner(socket));
                    threadArray[i].start();
                    break;
                }
                else
                {
                    PrintStream writer = new PrintStream(socket.getOutputStream());
                    writer.println("WAIT");
                    writer.flush();
                }
            }
        }
    Non ho letto bene tutto il resto ma questo sopra non è sensatissimo.
    Se lo slot nell'array è "usabile" (null o thread terminato), è ovviamente ok creare un nuovo Thread. Ma il "else" non ha senso. Il wait lo devi mandare solo se TUTTI gli slot sono "occupati". Non se appena uno è occupato (non vuol dire niente, magari quello successivo potrebbe essere usabile!).
    Credo che non sia tanto un problema di programmazione ma più di ... "ragionamento".
  • Re: Controllo thread

    Ma entra nell'else solo quando tutti gli slot son attivi se non erro
    Ah ok dovrebbe essere un else if allora
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Ma entra nell'else solo quando tutti gli slot son attivi se non erro
    Ah ok dovrebbe essere un else if allora
    No, non può essere un else o else if.
    Se tutti sono occupati lo puoi sapere solo DOPO che il for è terminato.
  • Re: Controllo thread

    Quindi mi serve una variabile di controllo? Magari un boolean su false se tutto è pieno
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Quindi mi serve una variabile di controllo? Magari un boolean su false se tutto è pieno
    Con una variabile boolean, certo che si può fare. Ma si può fare anche senza e in modo più furbo.

    Tra l'altro nel tuo minerDispatch hai messo l'invio del wait ma così hai mescolato 2 concetti! La gestione dei thread e la conoscenza del concetto del wait.

    E se invece il tuo minerDispatch NON inviasse il wait e restituisse solo true/false?
    In quali punti potresti mettere il return di false e true (pensiamo: true=ha creato il thread)? Guarda bene ...

    P.S. la questione di tenere il wait dentro minerDispatch o altrove, è solo una questione di "design". Puoi anche lasciare il wait dentro minerDispatch, non muore nessuno ....
  • Re: Controllo thread

    Facendo un i==3? non mi vengono altre idee senno
    vabbeh che tanto consegnato è consegnato, ha detto che grossomodo va bene, quindi non ci sono problemi se ora lo miglioro un pochino.
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Facendo un i==3?
    No.
    Puoi pensare di mettere l'invio del wait al fondo del metodo (DOPO il for)? E se sì, cosa altro dovresti cambiare? Pensaci ...
    (devi cercare di ragionare, è questo che serve)
  • Re: Controllo thread

    Mi viene in mente solo un if che considera i 3 slot pieni
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Mi viene in mente solo un if che considera i 3 slot pieni
    No. Se metti l'invio del wait fisso al fondo del metodo (e ripeto, DOPO il for), semplicemente quando trovi uno "slot" libero nell'array e crei il thread basta fare un return;
  • Re: Controllo thread

    Non sapevo. come funziona sta cosa?
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Non sapevo. come funziona sta cosa?
    Scusa ma il return l'hai già usato ... quale è il dubbio?
  • Re: Controllo thread

    Si, sui metodi che ritornano qualcosa, si fa ritornare quello che serve, ma solo return; non l'ho mai usato
  • Re: Controllo thread

    KuroKami69 ha scritto:


    ma solo return; non l'ho mai usato
    Una bella "lacuna" ....
  • Re: Controllo thread

    Che te puoi aiutarmi a colmare per caso?
  • Re: Controllo thread

    KuroKami69 ha scritto:


    Che te puoi aiutarmi a colmare per caso?
    Mah .. la questione del return è abbastanza semplice, per questo mi sono stupito vedendo che comunque l'avevi già usato.

    Il return è l'istruzione per far terminare esplicitamente un metodo (tecnicamente, anche un costruttore, sebbene sia rarissimo usarlo lì e poi da Java 8 anche in una lambda expression).
    Se il metodo ha tipo di ritorno void, chiaramente non puoi specificare un valore di ritorno. Se invece il metodo ha un tipo di ritorno non-void, allora dovunque usi il return nel metodo devi ovviamente fornire un valore di ritorno (una qualunque espressione che denota un valore).

    Cioè alla fin fine, è tutto qui. Ah beh, chiaramente il valore restituito deve essere "assegnabile" al tipo dichiarato dal metodo. Se un metodo ha tipo di ritorno double, puoi restituire es. un int, un float.

    Quindi quali sono o potrebbero essere i tuoi dubbi sul return?
Devi accedere o registrarti per scrivere nel forum
50 risposte