Visualizzazione dei risultati da 1 a 8 su 8

Discussione: SetPriority

  1. #1

    SetPriority

    Ciao, sto iniziando a lavorare con i Thread. Iniziamo con qualcosa di semplice. Vorrei due Thread, il primo che conta da 0 a 4 ed il secondo che conta da 5 a 10.
    Ovviamente vorrei che il secondo thread inizi alla fine del primo (per stampare i numeri ordinati). Ho pensato di attribuire una priorità al primo thread ma senza risultato.
    Ecco il codice:


    codice:
    package multipriorita;
    public class Main {
         public static void main(String[] args) {
            Conta1 a=new Conta1();
            Conta2 b=new Conta2();
            Thread th1 = new Thread(a) ; 
            Thread th2 = new Thread(b) ;  
            th1.setPriority(th2.getPriority()+1);
            th1.start();
            th2.start();
                    }
      }
      
    class Conta1 extends Thread{
        public void run (){
        for(int a=0;a<5;a++){System.out.println ("a:"+a);}
                           }
    }
    
    
    
    class Conta2 implements Runnable {
        public void run (){ 
        for(int a=5;a<10;a++){System.out.println ("a:"+a);}
                           }
    }
    Dove è il problema? :master:
    Stampa i valori così:
    codice:
    a:0
    a:5
    a:1
    a:6
    a:2
    a:3
    a:4
    a:7
    a:8
    a:9
    Ciao.

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Forse hai capito male cosa sia la priorità di un thread...


    Io proverei ad attivare un thread al termine dell'altro.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    E come si fa?

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    La parola Costruttore ti dice qualcosa?

    Potrebbe tornarti bene per dire a un thread che c'è un altro thread da richiamare quando è arrivato a 5...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Scusa, mi chiarisci il concetto di priorità? Io avevo capito che veniva eseguito il thread con maggiore priorità..
    Quindi
    codice:
    th1.setPriority(Thread.MAX_PRIORITY);
    pensavo fosse sufficiente, ho capito male?
    Ciao

  6. #6
    Ciao, ho risolto in altro modo..Comunque la spiegazione sulla priorità è ben gradita
    Ciao

  7. #7
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Forse è meglio che aspetti andbin...

    Ad ogni modo l'obiettivo dei thread è quello di essere eseguiti "contemporaneamente" (metto tra virgolette per pararmi il culo..), anche se esiste un ordine di priorità tra thread, questo ordine di priorità è gestito da uno schedulatore che mette effettivamente in esecuzione i thread, ma tutto questo è abbastanza astruso da non tradursi matematicamente nel fatto che un thread a priorità maggiore termini prima di un thread a priorità minore.
    Tipicamente un thread passa continuamente da uno stato "in esecuzione" a uno stato "in attesa", ad esempio scrivere un numero a console blocca il processore per attendere che sia completata la scrittura, mentre un processo attende la scrittura, un altro processo può entrare in esecuzione e mettersi in coda per stampare il proprio numero... Al di là di tutte le blasfemiche imprecisioni che ho commesso... quello che accade è che comunque ti ritrovi una stampa disordinata.

    Magari per una trattazione più corretta e rigorosa puoi provare a leggerti su Google libri "Thinking in Java, Volume 3 Di Bruce Eckel", Capitolo 1: "La concorrenza".
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  8. #8
    Ciao, la tua spiegazione è chiara. Infatti quello che accade assegnando la priorità è che esegue anche parte del secondo thread (solitamente mi trovavo il numero "5" in posizione errata cioè nella parte superiore).
    Grazie

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.