Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [java] Multithread

  1. #1

    [java] Multithread

    ciao a tutti,
    ho una procedura in java che esegue delle operazioni su una tabella.
    I record che esamina sono molti, e la procedura impiega quasi un'ora e mezza per finire.
    La macchina su cui gira sta cosa ha 4 processori, ma la procedura sembra che giri su una solo cpu.
    Allora ho provato a creare quattro 3d che si smazzano ciascuno un quarto dei record.
    Il mio problema è che non riesco a farli partire in parallelo.
    Cioè se io faccio
    thred1.start();
    trhed2.start();

    il secondo 3d aspetta che il primo sia terminato per partire.
    Come posso fare a farli partire in contemporanea?
    Ho provato anche a metterli in un unico threadgroup, ma non cambia nulla.

    Help me please!!!!

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    ma se il primo thread inizia una transazione sul database l'altro thread deve aspettare che il primo committi la tran

  3. #3
    Originariamente inviato da floyd
    ma se il primo thread inizia una transazione sul database l'altro thread deve aspettare che il primo committi la tran
    questo mi fa benissimo, ed infatti la connessione al db è in autocommit true.
    Il problema è che io vedo che il secondo 3d proprio non parte finchè non ha finito il primo.

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837

    scrivi il codice

  5. #5
    questo è il codice.
    La procedura principale fa questo:

    codice:
        
      ThreadGroup tg = new ThreadGroup("pippo");
    
      ThreadForzaConsuntivi tfc1 = 
       new ThreadForzaConsuntivi(tg, m_con, minWp, minWp + diff,
                                       dataInizio, dataFine,1);
    
      ThreadForzaConsuntivi tfc2 = 
       new ThreadForzaConsuntivi(tg, m_con, minWp + diff, maxWp,
                                       dataInizio, dataFine,2);
      tfc1.start();
      tfc2.start();
    La classe ThreadForzaConsuntivi estende la classe Thread ed ha questi metodi


    codice:
        
      public ThreadForzaConsuntivi(ThreadGroup tg, Connection m_con, 
                                   int wpInizio, int wpFine, 
                                   String dataInizio, String dataFine, 
                                   int num3d) {
        super(tg, "pippo");
        log.debug("forzo i consuntivi da " + wpInizio + " a " +  wpFine);
        this.wpInizio = wpInizio;
        this.wpFine = wpFine;
        this.dataInizio = dataInizio;
        this.dataFine = dataFine;
        this.numThread = num3d;
        this.m_con = m_con;
      }
    
      public void start(){
        try{
          forzaAssegnamentiPerActual();
        }
        catch(Exception se){
          se.printStackTrace();
          log.error(se);
        }
      }
    mentre infine nel metodo forzaAssegnamentiPerActual() ci sono le varie operazioni (fa una query, per ogni record di questa query fa una seconda query di insert in un'altra tabella.

    Il problema mi sembra questo:
    quando faccio

    tfc1.start();

    il controllo torna alla classe princiapale o finchè non ha terminato il metodo forzaAssegnamentiPerActual() richiamato nello start del thread non continua?
    Come faccio a fargli capire che mentre che sta eseguendo il metodo forzaAssegnamentiPerActual per il thread1 nel frattemop può far partier anche il secondo 3d?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Puoi postare almeno la firma del metodo forzaAssegnamentiPerActual()?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    codice:
        
      public ThreadForzaConsuntivi(ThreadGroup tg, Connection m_con, 
                                   int wpInizio, int wpFine, 
                                   String dataInizio, String dataFine, 
                                   int num3d) {
        super(tg, "pippo");
        log.debug("forzo i consuntivi da " + wpInizio + " a " +  wpFine);
        this.wpInizio = wpInizio;
        this.wpFine = wpFine;
        this.dataInizio = dataInizio;
        this.dataFine = dataFine;
        this.numThread = num3d;
        this.m_con = m_con;
      }
    
      public void run(){
        try{
          forzaAssegnamentiPerActual();
        }
        catch(Exception se){
          se.printStackTrace();
          log.error(se);
        }
      }
    Non devi sovrascrivere il metodo start(), ma il metodo run() del Thread.
    Questo, in breve. Nel dettaglio, consiglio di guardarti un tutorial sulla gestione dei Thread in Java...

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    37
    Forse potresti provare a sincronizzarli!
    Puoi creare una classe che ha metodi con i quali interagisci col db..metodi tutti syncronized...e poi avvii i treads in modo da non generare collisioni e renderli indipendenti!

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da Pablob
    codice:
        
    public void run(){
    Non me n'ero nemmeno accorto!!!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Originariamente inviato da LeleFT
    Non me n'ero nemmeno accorto!!!


    Ciao.
    cose che capitano...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.