Des suggestions pour un programme ou un petit projet pour en savoir plus sur la concurrence en Java? [fermé]


Je vise à en apprendre davantage sur la concurrence en Java. Actuellement, mon état de connaissance est faible. Je suis sûr de savoir ce que signifie "volatile". Je sais en quelque sorte ce que" synchronisé " signifie. Parfois. Je n'ai jamais écrit de code qui démarre les threads ou les gère. En dehors de ce problème, je me sens confiant et à la maison en travaillant en Java.

Je cherche des suggestions pour un petit projet ou programme qui nécessitera une compréhension de la concurrence pour fonctionner correctement et efficacement.

Author: Bill the Lizard, 2009-05-04

9 answers

Si vous ne faites que commencer, le problème producteur-consommateur est probablement un bon moyen de commencer:

Http://en.wikipedia.org/wiki/Producer-consumer_problem

Ne lisez pas trop car l'article Wikipedia contient également une solution au problème: -)

 9
Author: B.E., 2009-05-04 07:43:11

Essayez un résolveur de sudoku, avec différentes stratégies:

  • 3 fils : 1 pour les lignes, 1 pour les colonnes et 1 pour les sous-carrés
  • 9 threads : 3 lignes (1 fil de chaque 3 lignes, 3 colonnes et 3 pour les sous-carrés
  • 27 threads: 9 pour les lignes (1 thread chaque 1 rangée), etc
 9
Author: dfa, 2017-02-08 14:11:50

Écrire un algorithme de multiplication matricielle. Paralléliser il. Optimiser. Voyez comment il évolue, surtout si vous avez une machine multicœur. Que serait un projet amusant.

 9
Author: Julien Chastang, 2009-05-04 20:26:27

Je suis d'accord avec @Julien sur la multiplication mtrix . Dans ce problème, l'amélioration causés par l'utilisation de threads peut être beaucoup plus visible .
Mais comme apposed @dfa, je ne suis pas d'accord avec le Sudoku. il n'est pas assez raisonnable
Par exemple, voici mon résultat d'écriture Matrix-Mul dans les threads

 %        self                        
time    seconds   name    
32.38    10.72    Simple
21.29    7.05     Tiling
15.58    5.16     SimpleThread
9.63     3.19     ThreadTiling

Ceci est le résultat de la multiplication d'une matrice 1000*1000 . Vous pouvez facilement voir que la quantité de threading peut améliorer la vitesse de votre programme . ( Carrelage est une technique utilisée pour améliorer le cache hit )

Après cela, lorsque vous vous êtes familiarisé avec la syntaxe, vous pouvez plonger dans des problèmes classiques. ils peuvent être un peu plus difficiles, mais cela peut vous aider à vous familiariser avec les modèles pour résoudre les problèmes de concurrence .
Je suggère de jeter un oeil à Petit livre sur les sémaphores . Il est si complet et peut vous aider à saisir les idées derrière ces problèmes .

 3
Author: Rsh, 2012-07-03 14:12:59

Si vous êtes un programmeur quelque peu expérimenté, il pourrait être intéressant de créer un petit serveur pour prescrire des prix de partage qui utilise le Protocole de correction. Il devrait être capable de faire face à plusieurs clients (et ensuite vous apprendrez Swing ou certains techniciens Web) ce qui nécessite une concurrence.

Si vous êtes débutant, je suggère quelque chose de plus simple comme un thread producteur avec quelques threads consommateurs et vous obtiendrez des points supplémentaires si vous pouvez afficher graphiquement le processus.

 2
Author: willcodejavaforfood, 2009-05-04 07:42:38

Un projet d'apprentissage commun pour la simultanéité et le réseautage consiste à écrire un programme de chat. Il est similaire à la suggestion du serveur de correction, mais vous passez simplement du texte.

 2
Author: Peter Lawrey, 2009-05-04 07:51:10

Quand j'ai lu la programmation des systèmes concurrents à l'université, nous avons construit un système de vidéosurveillance - un PC maître qui récupérait les données vidéo d'un ou plusieurs PC esclaves avec des webcams. Je me souviens de ce projet car il vous a vraiment fait grok à la fois une programmation réseau efficace, des problèmes en temps réel et JNI:)

 2
Author: Christoffer, 2009-05-04 07:53:25

Ce n'est pas un projet complet mais il contient également des codes source. Je pense que ce serait génial pour avoir une bonne compréhension du threading.

De thread en Java

 1
Author: Chathuranga Chandrasekara, 2009-05-04 07:41:22

Je recommande fortement le livre Java Concurrency In Practice en tant que ressource pendant que vous travaillez sur le projet que vous choisissez.

 1
Author: Darron, 2009-05-04 13:33:52