Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer une variable à partir d'une valeur

Utiliser un String ou une valeur de variable pour en créer une autre

    19 septembre 2016 à 18:13:32

    Bonjour,

    Voilà pour le développement d'un petit projet, j'aurai besoin de savoir comment créer une ou plusieurs variables selon le contenu d'une autre. 

    Je m'explique , j'aimerai créer autant de Thread via un runnable un peut comme ceci :

    NewRunnableService run = new NewRunnableService("C:/");
    		   NewRunnableService run2 = new NewRunnableService("D:/");
    	       ExecutorService pool = Executors.newFixedThreadPool(4); 
    	       pool.submit(run);
    	       pool.submit(run2);
    	       pool.shutdown();

    qu'il y a de lecteur dans un pc. Je ne trouve actuellement pas de solution viable à mon problème. Auriez-vous une solution à me proposé ? 

    Merci, Jonathan.

    • Partager sur Facebook
    • Partager sur Twitter
      19 septembre 2016 à 20:06:14

      Bonjour,

      Après une petite recherche google, => File.getRoots() renvoie un tableau contenant les différents lecteurs. Après, une boucle for sur chaque lecteur et c'est plié.

      En Java 8, ça donne

      ExecutorService pool = Executors.newFixedThreadPool(4);
      Arrays.stream(File.listRoots())
            .map(File::getAbsolutePath)
            .map(NewRunnableService::new)
            .forEach(pool::submit);
      pool.shutdown();
      



      • Partager sur Facebook
      • Partager sur Twitter
        19 septembre 2016 à 22:50:07

        Bonsoir,

        Merci pour cette réponse, je cherchais plus complexe du genre à générer des newrunnableservice a gogo pour chacun des lecteurs.

        Jonathan,

        -
        Edité par Jonathan7295 19 septembre 2016 à 22:56:51

        • Partager sur Facebook
        • Partager sur Twitter
          19 septembre 2016 à 23:00:05

          Ce code crée un NewRunnableService pour chaque lecteur. Ce n'est pas ce que tu voulais ? Ou alors je ne t'ai pas bien compris, auquel cas, peux-tu expliquer plus précisément ce que tu souhaites faire ?

          • Partager sur Facebook
          • Partager sur Twitter
            19 septembre 2016 à 23:08:42

            Ce code crée en effet un NewRunnableService pour chaque lecteur mais quand je le teste pour chaque NewRunnableService créer, j'ai bien l'impression qu'il me parcours tout mes disques. Peut-être ai ce de ma faute, je me suis peut être mal exprimé. je cherche en fait a lister le plus rapidement les dossiers des lecteurs principaux du pc et pour ce faire j'aimerai effectué la lecture de chacun des dossiers des lecteurs dans un thread ou un runnable pour que la lecture se face aussi rapidement pour lire 1 ou 4 lecteurs par exemple puisque la lecture des dossiers de chaque lecteurs se feraient en même temps (en asynchrone)

            Modif apporté :

            Sorry, erreur de ma part au deuxième lancement du code cela à marcher à merveille je suis désolé pour mon précédent poste et d'avoir légèrement remis vos connaissances en cause.

            Merci de votre aide, 

            -
            Edité par Jonathan7295 19 septembre 2016 à 23:12:03

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 septembre 2016 à 3:35:07

              Salut,

              Juste quelques petites précisions:

              (en asynchrone)

              Quelque chose d'asynchrone n'est pas forcément parallèle. Or, deux threads permettent de paralléliser des tâches, l'asynchrone, pas forcément. (sachant que l'asynchrone est, pour parler du javascript, exploité par un système non-thread et donc 0 parallélisation)

              Enfin, attention à ne pas utiliser instancier plus d'objets Thread qu'il n'existe de coeurs sur la machine physique, car ça finirait à terme par ralentir le traitement. (le kernel doit jouer avec tous les processus)

              int nombre_coeurs = Runtime.availableProcessors();
              

              Bonne journée.

              -
              Edité par Anonyme 20 septembre 2016 à 3:35:18

              • Partager sur Facebook
              • Partager sur Twitter
                20 septembre 2016 à 9:17:15

                Bonjour,

                Merci pour ces conseils très avisé.

                Si j'ai bien compris je dois permettre le lancement de mes thread selon le nombre de coeurs de la machine donc je me trompe pas si j'utilise le code comme suite : 

                int nombre_coeurs = Runtime.availableProcessors();
                ExecutorService pool = Executors.newFixedThreadPool(nombre_coeurs);
                ....

                Comme ça je déclare autant de Thread qu'il y a de de lecteur dans la limite des coeurs de la machine ? 

                Bonne journée,

                Jonathan

                • Partager sur Facebook
                • Partager sur Twitter
                  20 septembre 2016 à 12:31:14

                  Re-Bonjour,

                  Pour ce code suivant qu'on ma conseillé je ne sais pas comment je fait pour passer un paramétre supplémentaire disons une chaine a ma classe NewRunnableService ?

                  Je suis novice en java 8 

                  ExecutorService pool = Executors.newFixedThreadPool(4);
                  Arrays.stream(File.listRoots())
                        .map(File::getAbsolutePath)
                        .map(NewRunnableService::new)
                        .forEach(pool::submit);
                  pool.shutdown();

                  Merci :D

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    20 septembre 2016 à 16:16:28

                    Salut,

                    >Comme ça je déclare autant de Thread qu'il y a de de lecteur dans la limite des coeurs de la machine ?

                    Oui, c'est tout bon ! Ça évitera à ta machine d'être gavée.

                    En revanche, pour ta question au niveau de Java 8, je suis un peu rouillé, donc je ne pourrais pas te répondre.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 septembre 2016 à 16:27:22

                      Salut,

                      Merci beaucoup j'ai constaté tes dires et franchement, bien joué tu ma bien aider sur se coup.

                      Ne t’inquiète pas pour mon autre question c'est gentil en tout cas de m'avoir aiguiller à propos des Threads. 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 septembre 2016 à 16:53:15

                        Tu veux passer un deuxième paramètre à ton constructeur ?

                        Sinon, tu peux regarder l'excellent tuto de Pinguet sur Java 8 :

                        https://openclassrooms.com/courses/2515616?status=waiting-for-publication

                        -
                        Edité par brubru777 20 septembre 2016 à 17:07:13

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Créer une variable à partir d'une valeur

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown