Ce Blog contient mes notes.
Nullius in verba
« Being a software craftsman is far more than that. It’s commitment to excellence. It’s a lifestyle. At the end of the day, as professionals we are expected to deliver high-quality services to our clients, which is normally achieved via well-crafted software. »- Coman Hamilton -
Raison pour utilisée un pool de threads:
*Si votre programme crée un grand nombre de threads courts, il devra plutôt utiliser un pool de threads.
*La création d’un grand nombre de threads peut considérablement dégrader les performances, voire bloquer la machine virtuelle. Dans ce cas de figure utilisez un pool de threads "fixe" qui limite le nombre total de threads simultanés.
la méthode utilisé est :
newFixedThreadPool :Le pool contient un jeu fixe de threads. Elle construit un pool de threads de taille fixe.
Si le nombre de tâches envoyées est supérieur au nombre de threads inactifs, les tâches non servies sont placées dans une queue. Elles sont exécutées à la fin des autres tâches.
Cette méthodes renvoie un objet de la classeThreadPoolExecutor qui implémente l’interfaceExecutorService.
Vous pouvez ensuite envoyer un Runnable ou un Callable à un ExecutorService de l’une des manières suivantes : Futuresubmit(Runnable task) Futuresubmit(Runnable task, T result) Futuresubmit(Callable task)
Lorsque vous avez terminé avec un pool de connexion, appelez shutdown. Cette méthode lance la
séquence de fermeture du pool.
Voici, en bref, ce qu’il faut faire pour utiliser un pool de connexion :
1. Appelez la méthode statique newFixedThreadPool de la classe Executors.
2. Appelez submit pour envoyer des objets Runnable ou Callable.
3. Pour pouvoir annuler une tâche ou si vous envoyez des objets Callable, restez sur les objets Future renvoyés.
4. Appelez shutdown lorsque vous ne voulez plus envoyer de tâches.
Exemple d'application : (Voir la vidéo demo , directement sur le blog)
ExecutorService: gère la gestion des Threads d'une manière optimale en arrière plan.
Exemple : ExecutorService service = Executors.newFixedThreadPool(10)
L’interface Callable est un type à paramètres, avec une seule méthode call : public interface Callable<V>
{ Vcall() throws Exception;
}
L’interface Future possède les méthodes suivantes : public interface Future<V>
{ Vget() throws...; Vget(long timeout, TimeUnit unit) throws...;
void cancel(Boolean mayInterrupt);
boolean isCancelled();
boolean isDone();
}
Future : Notion utilisé lorsqu'il y a une asynchronicité entre la requête et la réponse. C'est l'interface Future du package java.util.concurrent
L’emballage FutureTask est un mécanisme commode pour transformer un Callable à la fois en Future et en Runnable : il implémente les deux interfaces:
Par exemple :(voir cette vidéo)
Une question m'a était posé : "C'est quoi la qualité du logiciel ?" , j'ai dû répondre à partir de ce que j'ai lu dans différents références . La je propose une définition tiré du fameux livre "Software Quality Engineering ": -->Il y a d'abord les différentes vues de la qualité (views ),basé sur lesdifférents rôles,responsabilités et les attentesde qualitédesdifférentes personnes. Les cinqpoints de vuemajeur selon(.KitchenhametPfleeger,1996;Pfleegeretal,2002)sont les vues:transcendantale(transcendental ), utilisateur( user), fabrication(manufacturing ), produit(product), basée sur la valeur( value-based), commeindiquéci-dessous:
– la vue transcendantale : la qualité est quelque chose qu’on peut reconnaître, mais qu’on ne peut pas définir ; – la vue d’utilisateur : la qualité est la force apparente du produit pour réaliser des fonctions ; – la vue de fabrication : la qualité est la conformité aux spécifications ; – la vue du produit : la qualité est attachée aux caractéristiques intrinsèques du produit, c’est la vue la plus évoquée par les experts de la qualité du logiciel ; – la vue basée sur la valeur : la qualité dépend des coûts du produit.
-->puis dans le domaine des logiciels(software quality), cette confusion est limitée,car différentes personnes ont des points de vue différents et des attentes en fonction de leursrôles et responsabilités. Nouspouvonsdiviser ces personnes en deuxgrands groupes :
*Les consommateursde produits logicielsoude services,y compris lesclientset les utilisateurs, que ce soit interne ouexterne.Parfois,nous faisons égalementladistinctionentre lesclients, qui sontresponsables del'acquisitiondeproduitslogicielsoudes services,et lesutilisateurs,qui utilisent lesproduitslogicielsou des servicesà des fins diverses,bien quele double rôledeclientsetles utilisateurssont très fréquentes.Nous pouvonségalement étendre leconcept desutilisateurs pour inclure des utilisateurs non humainsou«invisibles»comme d'autres logiciels,embarqués, matériel,et l'environnementopérationnel global sous lequel lelogicielfonctionne et avec lequel il interagit(Whittaker,2001).
*Les fabricants (éditeur )de produitslogiciels,ou detoute personne impliquée dansle développement,la gestion, maintenance,marketing,et service de produitslogiciels.Nous adoptonsunelarge définition desproducteurs,qui comprennent également lesparticipantstiersqui peuvent êtreimpliqués encomplémentsur les produitsetservices,l'emballagedu logiciel,la certificationdu logiciel, s'acquitter devérification et validation indépendantesles responsabilités,et ainsi de suite.
Une définition claire et juste de la qualité demeure encore un souci pour la communauté du génie logiciel. Deux voies de recherche sur la qualité sont généralement empruntées.
Dans la première on s’occupe de la qualité du processus de développement
du logiciel et on croit que la qualité de ce dernier détermine la qualité du produit logiciel.
Dans la deuxième on juge qu’un bon processus ne garantit pas un bon produit et que la qualité de ce dernier est plutôt déterminée par un ensemble de propriétés intrinsèques contenues dans le produit.