2011-11-28 18 views
10

Quiero trabajar en multi-threading, pero mi proyecto actual no tiene tales oportunidades. ¿Puede alguien guiarme por dónde debería empezar? Necesito escenarios en tiempo real para poder hacerlo directamente. saltar a la codificación. Estoy leyendo lado a lado también.Java Multi Threading - casos de uso en el mundo real

Puedes consultar algunos sitios web para practicar.

+1

http://stackoverflow.com/questions/ 1835076/small-project-to-learn-java-threads Creo que este enlace puede ayudarle – vinay

+0

+1 para un buen puntero. – inder

+0

Me gusta ese enlace, esp. la sugerencia de una aplicación cliente-servidor. @Suman_Sohal, si tiene inclinaciones matemáticas, las operaciones de la matriz, como la multiplicación, son clásicos para aprender el subprocesamiento múltiple. – user949300

Respuesta

7

Google puede transferirlo a la práctica de sitios web tutoriales (mucho mejor que yo). Un buen escenario en tiempo real podría incluir cualquiera de los siguientes (puede parecer académico, pero las habilidades son absolutamente transferibles a la práctica):

  1. Problema del filósofo de comedor.
  2. Problema con el Reader/Writer.
  3. Problema del consumidor/productor.

Algunos otros más específicos:

  1. concurrente de búsqueda alfa-beta (esto es serio complicado).
  2. Cualquier algoritmo genético se puede implementar simultáneamente y dado que la memoria/almacenamiento se comparte entre hilos, puede ser bastante desafiante si se hace bien (pruebe el polígono semitransparente dibujando un proyecto de imagen. Puede buscarlo en google).
  3. El acceso simultáneo a la base de datos puede ser bastante interesante. Dibuja un escenario para ti.
  4. Eche un vistazo a http://projecteuler.net/ que incluye un montón de problemas interesantes. Muchos de los problemas allí se pueden implementar usando hilos.

Enjoy.

1

Me gustaría echar un vistazo a la biblioteca disruptor. Esto introduce una gran cantidad de conceptos avanzados de multi-threading y una vez que lo entiendas y puedas usarlo, sabrás más que la mayoría sobre este tema.

+0

Si el autor de la pregunta quiere aprender sobre cómo enhebrar, esta biblioteca puede ser un poco demasiado. Los conceptos y la implementación son bastante avanzados. –

+0

@RobertMunteanu, no es un buen punto de partida como usted sugiere, pero si quiere probar su comprensión del multihilo, puede ser útil. –

+1

¡Recomienda totalmente el video! http://www.infoq.com/presentations/LMAX –

1

Hay varios problemas con Java que solo están pidiendo a gritos una solución multiproceso. Dos He golpeado recientemente y resuelto fueron:

  • File.list tiene problemas horribles si hay muchos miles de archivos de la carpeta.
  • SAXParser.parse es un analizador de inserción. Muchos usuarios de xml preferirían un analizador de extracción pero preferirían no agregar otra biblioteca.

Ambos pueden ser ayudados considerablemente con una solución simple de dos hilos.

En el caso de File.list, ejecute el File.list en un hilo separado con una especial FileFilter que publica todos los archivos presentados a ella a un BlockingQueue. Un iterador en el BlockingQueue se puede usar para entregar los archivos a la persona que llama. Una mejora para listar el directorio recursivamente es una adición fácil si el código está escrito correctamente.

El SAXParser.parse se puede girar al revés de una manera similar.

He hecho ambas cosas recientemente y la experiencia me pareció muy esclarecedora.

0

Yo recomendaría usted para diseñar siguiente sistema para empezar con el asunto:

  1. Ascensor (3 en la fila), manteniendo los parámetros siguientes en consideración:

    consumo de energía, es decir ascensor más próximo se llevará a su solicitud dependiendo de si se está moviendo hacia arriba o ahora y la solicitud del usuario, el peso en el ascensor

    Consumo de tiempo.

  2. lector de archivos y sistema de escritor, donde varios usuarios pueden:

    Edit/Write/Search/Delete a file

0

multi-threading simulado por hilos a nivel de usuario. Estos subprocesos se implementan a nivel de aplicación, no a nivel de kernel del sistema operativo.

Estos hilos también llamados hilos verdes porque, tan frescos (nuevos) y jóvenes (no maduros o maduros).

casos de uso del mundo real

  • En Juegos para PC, objetos como coches, motos, etc. Ellos son sólo hilos.
  • La comunicación asincrónica puede permitir que una aplicación realice tareas adicionales en lugar de esperar a que se completen las tareas.
  • Las aplicaciones que tienen una serie de tareas que se pueden realizar en cualquier orden a menudo pueden beneficiarse de la comunicación asíncrona distribuida.
0

Cuando un subproceso único tarda mucho tiempo en completar una actividad de cómputo, debe dividirlo en tareas pequeñas y usar multithreading para reducir el tiempo de cálculo.

Puede ver muchos casos de uso para múltiples hilos en su proyecto.

  1. donde algunas tareas pueden funcionar de forma independiente con salida en función de otras tareas (Sólo abarcar un nuevo Thread o presentados Runnable/Callable tareas a ExecutorService/ThreadPoolExecutor)
  2. Cuando tenga que esperar a la finalización de múltiples tareas en paralelo para proceder con siguiente tarea (invokeAll())

    por ej. La Tarea 1 inicia tres tareas independientes Tarea 2, Tarea 3 y Tarea 4, pero la Tarea 5 debe comenzar después de la finalización de Tarea 2, Tarea 3 y Tarea 4.

Task 1    
----->    
     Task 2 
     -----> 
     Task 3 
     -----> 
     Task 4 
     -----> 
        Task 5 
--------------------------> 
  1. sistema es capaz de utilizar múltiples núcleos de CPU
  2. Cuando se tiene casos de uso como Tenedor-Ingreso tareas (uso : ForkJoinPool)
  3. Cuando desea mostrar el progreso de la tarea de cálculo largo (la barra de progreso se puede mostrar en un hilo y el cálculo largo) tarea puede ser ejecutada por otro hilo)

mensajes relacionados:

How to properly use Java Executor?

Whether to use invokeAll or submit - java Executor service

Java's Fork/Join vs ExecutorService - when to use which?

wait until all threads finish their work in java