Una semana mas con las prácticas de OCA, esta en especial que ha sido EXCESIVAMENTE LARGA nos ha supuesto mucho trabajo a vísperas de exámenes, desde aquí mandamos este mensaje a los profesores que esperamos que consideren que tenemos más asignaturas. Empezamos:
Ejercicio1:
Para todos los que hayan ejecutado todos los pequeños programas de este ejercicio habrán visto con claridad lo que en práctica son los procesos y más o menos como la CPU los gestiona. Aprovechando la asignatura de segundo “Servidores de Información Multimedia” os dejamos un pequeño esquema y un poco de conceptos que con seguridad os acabara formando la idea global de la gestión de procesos de la CPU.
ESTADOS DE UN PROCESO (MODELO BÁSICO):
- Ejecutándose: Proceso ejecutando instrucciones tendrá asignada la CPU.
- Listo: El proceso está listo en el procesador para iniciar o continuar
su ejecución.
- En Espera o Bloqueado: El proceso deja de competir por el procesador,
esperando un evento externo (terminación de una operación de
Entrada/Salida, sincronización con otro proceso, una señal, etc.).
Veréis que un Thread implicaría que el proceso pase de estar en “Ejecución” a estar en “Espera o Bloqueado” hasta que pase el tiempo que en el que duerme el proceso para poder volver al estado de “Listo”.
Notar que SIEMPRE que implementemos un Thread.sleep() hay que tratar excepciones con un try-catch.
Ejercicio 2:
Destacamos las diferencias entre los tres programas:
TwoThreads
Es necesario crear un objeto Runnable y arrancarlo (run()).
Se crea un objeto Thread para acceder a sus métodos como arrancarlo y pedir su nombre.
TwoThreadsSimple
Implementa la interfaz Runnable (ahorro de código).
Creamos una instancia de la clase TwoThreadsSimple y un Thread para arrancarlo.
TwoThreadsSimple2
Extendemos de Thread (mas ahorro de código).
Creamos una instancia de la clase TwoThreadsSimple2 y al extender de Thread este se convierte en uno.
Ejercicio 3:
En este ejercicio volvemos a ver como la CPU trata a los procesos, dichas formas son bastante complejas y no necesariamente ordenadas, ya que el objetivo es optimizar el uso del procesador, en el primer programa “RaceCondition” al ejecutarlo vemos que los resultados en pantalla son para nada previsibles.
El programa “RaceConditionSolved” es muy complejo y con seguridad gastara más recursos que su versión simple. Para simplificar como ha sido hecho resumimos:
- Se crean un vector para ordenarlos eventQueue.
- Creamos los 2 distintos Runnable 0 y 1.
- Se crea el método algorítmico eventDispacherRunnable para tratarlos
- Por ultimo el método main.
Ejercicio 4:
En este ejercicio, que casi parece una práctica entera, vamos a dar por sentada toda la base de Swing ya que como casi todos estamos con el juego supongo que estará más que visto.
TRUCO: Para los métodos que se piden…
-
Aquí tenéis un ejemplo de invokeLater para updateGUI en la clase StroboscopicGUI:
"static void javax.swing.SwingUtilities.invokeLater(Runnable doRun)"
public static void updateGUI() {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
label.setForeground(foregroundColor);
label.setBackground(backgroundColor);
}
});
}
-
Otro para invokeAndWait tambien para updateGUI en la clase BinaryCyclicCounterGUI
"static void javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)"
public void updateGUI() {
try {
javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {
for(int i=0; i<NLEDS; i++) {
if (leds[i].get())
labels[i].setBackground(ON);
else
labels[i].setBackground(OFF);
}
}
});
}
catch (InterruptedException e) {
updateGUI();
}
catch (java.lang.reflect.InvocationTargetException e) {
updateGUI();
}
}
CONSEJO: Tener claro el manejo de el “Event-dispaching thread” que se arrancara automáticamente cuando se llama la primera vez: setVisible(), show(), pack().

Mayo 27, 2008 a las 10:24 am
Bueno bueno…Menudos máquinas estaís hechos. Ya veo que a vosotros los viajes no os sirven de excusa para seguir haciendo las prácticas semanalmente;)
A ver si con estos especies de tutoriales y los de otros compañeros nos sirven para poder acabar de retocar nuestro post.
P.D: nos va a tocar pillar una sala con rotuladores dentro de poco para afianzar los conceptos que tenemos cada uno y seguro que se nos da igual de bien que la última vez…
Agur