IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Comment stocker le résultat d'un thread?


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut Comment stocker le résultat d'un thread?
    Bonjour,

    Avec le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class CalculusThread extends Thread {
     
    	// Propriety
    	Fenetre fenetre;
     
    	// Constructor
    	public CalculusThread(Fenetre fenetre) {
    		// TODO Auto-generated constructor stub
    		this.fenetre = fenetre;
    	}
     
    	// Run
    	public void run() {
     
    		try {
    			MonteCarloSimulationNtimes simulation = new MonteCarloSimulationNtimes(
    					fenetre.getCallPutFlag(), Double.parseDouble(fenetre
    							.getJtf2().getText()), Double.parseDouble(fenetre
    							.getJtf3().getText()), Double.parseDouble(fenetre
    							.getJtf4().getText()), Double.parseDouble(fenetre
    							.getJtf5().getText()), Double.parseDouble(fenetre
    							.getJtf6().getText()), Double.parseDouble(fenetre
    							.getJtf7().getText()), Double.parseDouble(fenetre
    							.getJtf8().getText()), Double.parseDouble(fenetre
    							.getJtf9().getText()));
     
    			if (fenetre.getCallPutFlag() == null) {
    				fenetre.getMessage().setText(
    						"Please choose either call or put option!");
    			} else {
    				double dResultat = simulation.calcul();
    				System.out.println(String.valueOf(dResultat));
                                    fenetre.getResultat().setText(
    						"Please choose either call or put option!");
    			}
    		} catch (NumberFormatException e) {
    			fenetre.getMessage().setText(
    					"Please give me all the characteristics of the option!");
    		}
     
    	}
     
    }
    J'ai réussi à faire un thread qui calcule le prix d'un produit financier selon la formule de MonteCarlo et qui renvoie le résultat dans le JLabel qui s'appelle resultat associé au getter getResultat de ma fenêtre.

    Problème: je cherche à réaliser plusieurs calcul de la simu de MonteCarlo en même temps et afficher tous les résultats sur ma fenêtre.

    J'ai commencé par remplacer cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else {
    				double dResultat = simulation.calcul();
    				System.out.println(String.valueOf(dResultat));
                                    fenetre.getResultat1().setText(
    						"Please choose either call or put option!");
    			}
    et changer fenetre.getResultat2 mais cela me fait créer plusieurs thread donc ca devient lassant...

    Est-ce que quelqu'un voit comment on pourrait régler ce problème?

    Merci d'avance et n'hésitez pas à me demander des précisions pour bien cerner le problème si je me suis mal exprimé!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut
    J'ai aussi essayé cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class CalculusThread extends Thread {
     
    	// Propriety
    	Fenetre fenetre;
    	public String resultat;
     
    	// Constructor
    	public CalculusThread(Fenetre fenetre) {
    		// TODO Auto-generated constructor stub
    		this.fenetre = fenetre;
    	}
     
    	// Run
    	public void run() {
     
    		try {
    			MonteCarloSimulationNtimes simulation = new MonteCarloSimulationNtimes(
    					fenetre.getCallPutFlag(), Double.parseDouble(fenetre
    							.getJtf2().getText()), Double.parseDouble(fenetre
    							.getJtf3().getText()), Double.parseDouble(fenetre
    							.getJtf4().getText()), Double.parseDouble(fenetre
    							.getJtf5().getText()), Double.parseDouble(fenetre
    							.getJtf6().getText()), Double.parseDouble(fenetre
    							.getJtf7().getText()), Double.parseDouble(fenetre
    							.getJtf8().getText()), Double.parseDouble(fenetre
    							.getJtf9().getText()));
     
    			if (fenetre.getCallPutFlag() == null) {
    				fenetre.getMessage().setText(
    						"Please choose either call or put option!");
    			} else {
    				double dResultat = simulation.calcul();
    				System.out.println(String.valueOf(dResultat));
    				resultat = String.valueOf(dResultat);
    			}
    		} catch (NumberFormatException e) {
    			fenetre.getMessage().setText(
    					"Please give me all the characteristics of the option!");
    		}
     
    	}
     
    }
    en essayant de créer une variable de type string et la récupérér par la suite avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Thread ct1 = new CalculusThread(fenetre);
    		fenetre.resultat1.setText(resultat);
    mais cela ne fonctionne pas non plus!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    Bonjour,

    Tu peux utiliser le package java.util.concurrent de java 5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    L'utilisation des Future permet d'exécuter plusieurs Threads en parallèle et de récupérer le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    // Créé un pool de Thread de taille fixe
    ExecutorService executor = Executors.newFixedThreadPool(3);
     
    Future<String> futureAction1 = executor.submit(new Callable<String>(){
    	public ActionOne call(){
    	return doAction1();}
    });
     
    Future<String> futureAction2 = executor.submit(new Callable<String>(){
    	public ActionTwo call(){
    	return doAction2();}
    });
     
    Future<String> futureAction3 = executor.submit(new Callable<String>(){
    	public ActionThree call(){
    	return doAction3();}
    });
     
    // on récupère les résultats		
    try{
     
    String resultatAction1 = futureAction1.get());
    }catch(InterruptedException e){
    	throw new ServiceException(e);
    }catch(ExecutionException e){
    	throw new ServiceException(e);
    }
     
     
    String resultatAction2 = futureAction2.get());
    }catch(InterruptedException e){
    	throw new ServiceException(e);
    }catch(ExecutionException e){
    	throw new ServiceException(e);
    }
     
    String resultatAction3 = futureAction3.get());
    }catch(InterruptedException e){
    	throw new ServiceException(e);
    }catch(ExecutionException e){
    	throw new ServiceException(e);
    }			
     
     
    // libère les ressources	
    }finally{
    if(executor != null){
    	try{
    		if(executor.isTerminated()){
    				executor.shutdown();
    		}else{
    				executor.shutdownNow();
    		}
    	}catch(Throwable e){
    		log.error("Erreur: ", e);
    	}
    	}
    }

Discussions similaires

  1. [MySQL] Comment stocker les résultats d'un enregistrement dans des variables?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 30/07/2010, 21h23
  2. Réponses: 3
    Dernier message: 10/05/2010, 20h19
  3. Comment stocker des threads dans une liste?
    Par Zoners dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 21/04/2010, 11h21
  4. Réponses: 2
    Dernier message: 27/08/2007, 13h11
  5. Réponses: 11
    Dernier message: 18/07/2006, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo