Partage
  • Partager sur Facebook
  • Partager sur Twitter

Multithreading - Semaphore - File

    22 avril 2015 à 18:41:51

    Bonsoir/Bonjour à tous,

    Dans le cadre d'un projet scolaire, nous devons développer une application (un jeu) en réseau. Pour cela, nous devons utiliser le mécanisme de thread, de synchronisation et j'en passe.

    Cependant, j'ai quelques questions qui me trottent à propos de la bonne utilisation d'une file, de sémaphore ou d'éventuel conseils.

    Voici une partie de code d'un de mes threads : 

    try {
                while (true) {
                    sem.acquire();
                    if (!dispatcher.getListOfTask().isEmpty()) {
                        Task t = dispatcher.getListOfTask().peek();
                        if (t.getDestination().equals(StateTask.DistributedClient)) {
                            dispatcher.getListOfTask().poll();
                            AddClient addClient = (AddClient) t;
                            getSocketOfClient().put(addClient.getIdentifyClient(), addClient.getSocketClient());
                        } else if (t.getDestination().equals(StateTask.Distributed)) {
                            dispatcher.getListOfTask().poll();
                            out = new PrintWriter(getSocketOfClient().get(t.getIdentifyClient()).getOutputStream());
                            out.print("\n" + t.getDestination());
                            out.flush();
                            System.out.println("Task : " + t.getDestination());
                            Thread.sleep(1000);
                        }
                        
                    } else {
                        Thread.sleep(2000);
                    }
                    sem.release();
                }
            } catch (Exception e) {
                System.out.println("Error - Thread out : " + e.getMessage());
            }

    Pour l'instant, cela fonctionne à peu près correctement cependant, je n'aime pas vraiment avoir des sleep dans mon thread. Mais je n'ai pas l'impression d'avoir le choix pour être capable d'afficher un résultat dans la console ou la console de NetBeans. 

    Surtout, mon application est grandement ralentie à la suite des différents "Sleep" présent dans les threads, je parle là d'environ 1 seconde de délai mais cela me semble quand même de trop.

    Ensuite, j'ai fait le choix d'utiliser une ConcurrentLinkedQueue qui me semblait correspondre à mes attentes puisque j'ai X producteurs et 2 consommateurs. Ai-je bien fait ?

    Je suis "nouveau" dans la programmation multithreading par conséquent, je ne sais pas encore ce qui est préférable d'utiliser ou non. 

    Si vous avez des réponses à mes "problèmes" ou des idées à me suggérer, je suis preneur :)

    Merci pour vos réponses,

    Grégoire

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2015 à 19:48:58

      Quelqu'un peut-il jeter un coup d’œil ? :)

      Merci

      • Partager sur Facebook
      • Partager sur Twitter

      Multithreading - Semaphore - File

      × 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