Java Threads Book y recursos java


Hoy me he leído los cuatro primeros capítulos del libro sobre programación concurrente en Java que cogí de la biblioteca de la facultad de ciencias ayer. El libro es el siguiente:

Java Threads. Understanding and Mastering Concurrent Programming. Scott Oaks and Henry Wong. 3rd Edition. Covers J2SE 5.0 Tiger. O’Reilly 2004.

El libro tiene una página web propia desde la que se pueden descargar los ejemplos de código que vienen en el libro en esta edición y en ediciones anteriores (que cubren versiones anteriores de la plataforma Java) El libro cubre todos los nuevos recursos para la programación concurrente que incluye la versión J2SE 5.0 (JDK 1.5) y las diferencias con versiones anteriores que obligaban a construir estos recursos de forma independiente o recurrir a librerías (APIs) propietarias de terceros.

J2SE 5.0 incluye la especificación java JSR 166 de utilidades para la concurrencia (concurrent utilities) con nuevas APIs y extensiones a las ya existentes. Un repaso a estos añadidos ayuda a delimitar el área de interés del libro y obtener una visión práctica de la parte teórica que he visto en la asignatura del máster:

  • Atomic Variables: un conjunto de clases que permiten realizar operaciones seguras sobre las mismas sin necesidad de sincronización.
  • Explicit Locks: locks para sincronización de grano fino que pueden ser cogidos y liberados por programación.
  • Condition Variables: variables que se pueden utilizar para notificación (wait/notify) de condiciones de sincronización cuando se cumplen determinadas condiciones (invariants, p.e)
  • Queues: una implementación de colección de objectos (collection classes) que tienen en cuenta su uso con threads.
  • Synchronization primitives: nuevas clases para realizar casos complejos de sincronización.
  • Thread pools: clases para gestionar conjuntos de threads que tienen que utilizarse para ejecutar tareas de la aplicación.
  • Thread schedulers: clases que facilitan la ejecución de tareas que deben ejecutarse con restricciones temporales.

Todos estos añadidos pueden clasificarse en tres categorías: nuevas implementaciones de cosas que ya existían (p.e Explicit locks, Condition variables) que añaden flexibilidad a la seguridad de los datos (i.e synchronized) y la sincronización entre threads (i.e wait/notify); nuevas utilidades que aparecen de forma recurrente cuando se programan aplicaciones concurrentes (i.e pools, schedulers); y utilidades para minimizar la sincronización (p.e Atomic variables) ya que el abuso de esta técnica penaliza el rendimiento de las aplicaciones y hacen el código más complejo.

Por otra parte esta editorial tiene un catálogo bastante completo de libros sobre Java y además tiene un servicio de lectura de los libros online llamado Safari Bookshelf. Además tiene un portal para desarrolladores de Java bastante completo con artículos, noticias y ejemplos en código fuente. En su página inicial tiene la referencia a un sitio oficial de Sun llamado java.net en donde se encuentran muchas más referencias y artículos.

Un comentario en “Java Threads Book y recursos java

  1. En el primer capítulo de introducción se comienza con una definición de términos sobre java y sus características de concurrencia que ha tenido siempre y que en la versión explicada en el libro (J2SE 5.0) han madurado para incluir técnicas avanzadas. Estas utilidades de concurrencia (i.e concurrency utilities/JSR 166) permiten obviamente realizar varias tareas al mismo tiempo (usualmente llamado paralelismo cuando se dispone de recursos de computación que hacen efectiva la ejecución al mismo tiempo real), simplificando muchas veces el diseño de programas e introduciendo la habilidad de acceder a datos de dos o más threads al mismo tiempo, lo cual requiere sincronización.

    Todos los ejemplos de código que aparecen en el libro están disponibles online. Se agrupan en paquetes java con las clases generales en el paquete con el nombre del capítulo (p.e javathreads.examples.ch02) y las clases de los ejemplos concretos con paquetes con el nombre correspondiente (i.e javathreads.examples.ch02.example1) Para compilar los ejemplos se puede utilizar los pasos clásicos:

    java -source 1.5 javathreads/examples/ch02/example1/*.java
    java javathreads.examples.ch02.example1.SwingTypeTester

    o bien utilizar la herramienta de automatización ant con un comando como:

    ant ch2-ex1

    Algunos ejemplos requieren argumentos en línea de comandos. Estos argumentos suelen tener un valor por defecto especificado en el fichero build.xml y pueden ser nuevamente definidos con el comando ant:

    ant -DCalcThreadCount=5 ch5-ex4

    La parte más interesante del capítulo es el apartado donde se justifica el uso de threads. Como ya hemos dicho el uso threads se hace de forma nativa en el lenguaje aunque no se quiera. Históricamente se ha utilizado de forma explícita en ciertas aplicaciones que requieren la ejecución concurrente de varias tareas cono los interfaces gráficos de usuario. Hoy en día la disponibilidad de ordenadores tanto en centros de cálculo como en nuestras casas con un gran número de núcleos hace que la programación con threads sea algo imprescindible para obtener un rendimiento aceptable. Las operaciones de entrada y salida no bloqueantes (NIOs) , la alarmas y los temporizadores (i.e Timers) son otros candidatos a los threads. La ejecución de tareas independientes es la utilidad obvia. Finalmente la paralelización y ejecución de las tareas en varios procesadores es la puntilla final.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s