2009-05-04 18 views
9

Mi objetivo es aprender sobre concurrencia en Java. Actualmente mi estado de conocimiento es pobre. Estoy bastante seguro de saber lo que significa "volátil". Como que sé lo que significa "sincronizado". A veces. Nunca he escrito código que inicie los hilos o los administre. Fuera de este tema, me siento seguro y en casa trabajando en Java.¿Alguna sugerencia para un programa o pequeño proyecto para aprender sobre concurrencia en Java?

Estoy buscando sugerencias para un pequeño proyecto o programa que requiera comprender la simultaneidad para funcionar de manera correcta y eficiente.

Respuesta

9

si realmente estás recién empezando entonces probablemente el problema del productor-consumidor es una buena manera de empezar:

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

No lea demasiado porque el artículo de Wikipedia también contiene una solución al problema :-)

+0

+1. IMO esta es una de las mejores maneras de aprender conceptos de enhebrado. – talonx

+0

Oops ... 'ways' = 'examples' – talonx

+0

Eché un vistazo rápido y puedo ver de inmediato que no sé cómo hacerlo bien. Por lo tanto, se ajusta a la ley y voy a intentarlo, ¡muchas gracias! – jjujuma

1

Este no es un proyecto completo pero también contiene algunos códigos fuente. Creo que sería genial para obtener una buena comprensión acerca de enhebrar.

Threading in Java

2

Si usted es un programador experimentado algo que puede ser interesante para crear un poco de servidor para compartir la prescripción precios que utiliza el Fix Protocol. Tendría que ser capaz de hacer frente a varios clientes (y luego aprender a Swing o algunos técnicos web) que requiere concurrencia.

Si eres un principiante, sugiero algo más simple como un hilo de productor con un par de hilos de consumo y obtendrías puntos extra si puedes mostrar gráficamente el proceso.

2

Un proyecto común de aprendizaje para concurrencia y redes es escribir un programa de chat. Es similar a la sugerencia del servidor FIX pero solo pasa el texto.

9

tratar un resolver sudoku, con diversas estrategias:

  • 3 hilos: 1 para las filas, 1 para las columnas y 1 para sub-cuadrados
  • 9 hilos: 3 para las filas (1 hilo cada 3 filas), 3 para las columnas y 3 para sub-cuadrados
  • 27 hilos: 9 para las filas (1 hilo de cada 1 fila), etc
+4

Hay una carga adicional de resolver un acertijo, lo que distraería la comprensión de los principios de la programación concurrente. – alphazero

2

Cuando leí la programación simultánea de sistemas en la universidad, creamos un sistema de videovigilancia, una computadora principal que obtenía datos de video de uno o más PC esclavos con cámaras web. Recuerdo ese proyecto ya que realmente te hizo pensar en la programación de red eficiente, problemas en tiempo real y JNI :)

8

Escriba un algoritmo de matriz multiplicada. Paralelizarlo. Optimizarlo Vea cómo se escala especialmente si tiene una máquina multi-core. Ese sería un proyecto divertido.

2

Estoy de acuerdo con @Julien en la multiplicación de mtrix. En este problema, la mejora causada por el uso de hilos puede ser mucho más visible.
Pero como apposed @ dfa, no estoy de acuerdo con Sudoku.no es lo suficientemente sensible
Por ejemplo, aquí está mi resultado de la escritura Matriz-Mul en las discusiones

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

Este es el resultado de la multiplicación de una matriz de 1000 * 1000. Puede ver fácilmente cuánto subprocesamiento puede mejorar la velocidad de su programa. (El mosaico es una técnica utilizada para mejorar el golpe de caché)

Después de eso, cuando se familiarizó con la sintaxis, puede sumergirse en problemas clásicos. pueden ser un poco más desafiantes, pero pueden ayudarlo a familiarizarse con los patrones para resolver problemas de concurrencia.
Sugiero echar un vistazo a Little book on semaphores. Es muy completo y puede ayudarte a comprender las ideas detrás de estos problemas.

+1

El libro es realmente muy útil, gracias. –

Cuestiones relacionadas