DEFINICIÓN, INSTANCIACIÓN E INICIACIÓN DE THREADS (HILOS) (OBJETIVO 4.1)
El método start() más de una sola vez lanza IllegalThreadStateException (la cual extiende de RuntimeException).
TRANSICIONES ENTRE ESTADOS DE HILOS (OBJETIVO 4.2)
Existen cinco estados: “nuevo”, “ejecutable”, “en ejecución”, “bloqueado/esperando/ dormido”, y “muerto” (new, runnable, running, blocked/waiting/sleeping, dead).
Estados de los hilos
SLEEP, YIELD Y JOIN (OBJETIVO 4.2)
El método setPriority() se utiliza, solo sobre instancias de Thread, para dar una prioridad a los hilos entre los valores 1(baja) y 10(alta)
PROBLEMAS DE ACCESO CONCURRENTE Y SINCRONIZACIÓN DE HILOS (OBJETIVO 4.3)
Los métodos estáticos pueden estar sincronizados, utilizando como cerradura la instancia java.lang.Class que representa la clase.
COMUNICACIÓN CON OBJETOS A TRAVÉS DE WAIT() Y NOTIFY() (OBJETIVO 4.4)
Los métodos wait(), notify() y notifyAll() deben ser invocados desde un contexto sincronizado.
Un punto a tomar en cuenta es que para poder llamar al método wait(), se tuvo que sincronizar el bloque de código y obtener el bloqueo de b, de lo contrario se obtiene una excepción de tipo java.lang.IllegalMonitorStateException