2010-09-03 3 views
8

OK Je ne suis pas seulement à nouveau en Java, mais concurrency suis assez nouveau à la programmation java. J'ai essayé de comprendre la concurrence des tutoriels java, j'ai essayé de lire Concurrency en pratique mais il semblait trop avancé, donc j'ai essayé de lire quelques autres livres: SCJP Un compréhensif, Le langage de programmation Java 4ème édition.
C'est comme s'il y avait des choses qui ne s'additionnent pas ou qui n'ont aucun sens, je ne suis pas capable d'obtenir le pourquoi et le comment et de former le modèle correct de compréhension conceptuelle. Je m'excuse de décrire cet exercice dans la futilité. Mais quelqu'un peut-il s'il vous plaît recommander de bons matériaux de lecture et/ou des moyens d'apprendre la concurrence dans Java.Ne peut pas obtenir ma tête en java concurrency, a essayé de lire des livres recommandés

+1

Apprendre les bases de filetage simultané premier ('' phtreads' et fork' en c) – alternative

Répondre

7

, mais je suis aussi assez nouveau à la programmation java

Laissez la livre concurrentiel de côté pendant quelques mois et aller de l'avant avec la lecture d'un livre de base Java/SCJP et pratique glaçage Java de base beaucoup. Créez-le maintenant et puis Thread ou Runnable selon les instructions du livre. Jouez avec pendant quelques mois jusqu'à ce que vous ayez une bonne compréhension. Puis continuez avec le livre de concurrence.

En savoir marcher avant de courir, sinon vous ramper au lieu de courir.

+1

Je suis d'accord avec la marche avant de courir, mais une fois que vous avez lu des livres sur les bases de Java, le prochain livre que vous lisez devrait être "Effective Java" par Josh Bloch. Après tout cela, si vous ne l'obtenez toujours pas, essayez les files d'attente simples et les exemples de travail avec synchroniser. –

+1

"Quelques mois" est honnêtement dit très optimiste aussi bien. Mais si vous avez la motivation ... – BalusC

+0

Core Java par Horstmann et Cornell est également bon et a une couverture j.u.concurrent à la fin –

3

Il est un sujet difficile, personne n'a saisir pleinement, pas même ceux qui l'a conçu.

Beaucoup de gens n'en comprennent qu'un sous-ensemble. Si vous ne connaissez que quelques astuces/modèles que vous pouvez utiliser dans vos programmes en toute confiance, c'est suffisant. De là, vous accumulez de plus en plus.

Un novice ne peut savoir qu'il peut ajouter mot-clé « synchronisée » aux méthodes. Étonnamment cela a résolu beaucoup de problèmes et fonctionne très bien, même s'il n'a aucune idée de ce qu'il fait.

7

Cela sonne comme vous allez bientôt être testé (classe? Certification?) "Sur Java concurrency". Vous n'avez pas expérimenté le cycle de l'exécution d'un problème de manière naturelle, en pensant à la manière de le résoudre et en vous tournant vers la concurrence pour trouver une solution. Si tel est le cas ...

(1) Ne pas blâmer votre cerveau. Plutôt, prenez du recul et commencez à penser aux problèmes qui vous intéressent. Écrivez-les. Les applications Internet sont un bon point de départ. Par exemple, écrire une sorte de serveur Internet capable de gérer plusieurs connexions d'utilisateurs différents, comme un serveur de jeu. Ou, un programme de négociation d'actions qui doit gérer les commandes de votre robot en même temps que le traitement des informations du courtier.

(2) Pensez concurrency. Maintenant que vous avez un problème qui vous intéresse, et en pensant à la simultanéité comme au multitâche, dessinez un diagramme des acteurs/programmes avec des flèches représentant la façon dont ils doivent communiquer entre eux. Esquissez un code factice-squelette. Vous n'allez pas écrire un serveur de jeu; mais vous pouvez créer une bibliothèque de classes squelette simple avec des fonctions membres simples et vides comme connectToGame(){}

(3) Vous êtes maintenant prêt. Exécutez un exemple de thread hello-world ou deux.Parcourez vos livres ou parcourez les Javadocs et découvrez les différentes structures concurrentes disponibles. Pensez à ceux que vous pourriez appliquer à votre problème. Ne vous inquiétez pas de faire le «bon choix». Vous allez bientôt découvrir si vous avez quelque chose qui fonctionne.

(4) étreinte essais et erreurs. Il y a un autre mot pour ça: apprendre!

Maintenant, après avoir acquis de l'expérience dans ce domaine, vous serez en mesure de prendre un livre Java concurrentiel et de lire à propos de le problème de quelqu'un d'autre.

Accrocher là-bas et ne donnent pas.

1

Je me sens comme si je comprends arrière et en avant la concurrence. Récemment, j'ai attrapé un livre sur l'étagère dans notre bureau et j'ai trouvé que c'était très bien. Pas seulement en concurrence, il donne une bonne couverture de Java dans son ensemble.

Introduction to Java Programming, Eighth Edition: Comprehensive Version, Y. Daniel Liang

Cependant, la plupart de ma compréhension est venu de l'expérience de travail avec le code, la résolution des problèmes, et des exemples d'essayer. Je n'ai jamais vraiment compris le filetage avant de l'avoir fait.

Concurrency est complexe et la plupart des gens ne l'obtiendra pas seulement de lire. Regardez à travers l'API et écrivez quelques programmes de test pour essayer les choses. Quel que soit le livre que vous choisissez, essayez de ne pas simplement lire le code, l'écrire et l'exécuter. Après un jour ou deux, travailler avec, vous l'aurez compris.

2

Pour ajouter mon grain de sel: se concentrer sur l'apprentissage des concepts de premier concurrence, plutôt que les machanics d'utiliser effectivement dans une langue particulière. Si vous vous embourbez dans des constructions linguistiques, il sera beaucoup plus difficile d'avoir une compréhension de haut niveau du sujet.

À cette fin, je recommande Comment écrire des programmes parallèles par Carriero & Gelernter (gratuit & PDF download juridique). Il établit un bon équilibre entre la description des concepts et la fourniture d'exemples concrets de code, et ne s'enlise pas en théorie. C'est en fait très lisible et divertissant (ou peut-être que ce soit juste moi).

Questions connexes