Está usted en Indice > Construcción > Lenguajes > Java > Lecciones y Paso a Paso > Java en Hebras
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Java en Hebras (2)

Como siempre, compilarlo con javac Ejemplo19.java y ejecutarlo con java Ejemplo19.

En un sistema operativo preemptivo, la salida será más o menos así:

Hola, soy Juan y este es mi mensaje 1
Hola, soy Juan y este es mi mensaje 2
Hola, soy Luis y este es mi mensaje 1
Hola, soy Luis y este es mi mensaje 2
Hola, soy Nora y este es mi mensaje 1
Hola, soy Nora y este es mi mensaje 2
Hola, soy Nora y este es mi mensaje 3
Hola, soy Juan y este es mi mensaje 3
...........etc.

Qué significa que un sistema operativo es preemptivo? Casos típicos son Unix o Windows 95: cada tarea utiliza una parte del tiempo del procesador, y luego lo libera para que puedan ejecutarse otras tareas (otros threads). Por eso se mezclan los mensajes de salida. Si el sistema operativo es no preemptivo, el procesador no se libera hasta que no termina con el thread actual, y por lo tanto la salida sería así:

Hola, soy Juan y este es mi mensaje 1
Hola, soy Juan y este es mi mensaje 2
Hola, soy Juan y este es mi mensaje 3
Hola, soy Juan y este es mi mensaje 4
Hola, soy Juan y este es mi mensaje 5
Hola, soy Luis y este es mi mensaje 1
Hola, soy Luis y este es mi mensaje 2
...........etc.

Si ustedes están utilizando un sistema operativo no preemptivo, deben explícitamente indicarle al procesador cúando puede ejecutar (dar paso) a otra tarea; para eso simplemente modifiquen el método run():

	public void run() {
		for (int i=1; i<6; i++) {
			String msg = mensaje+i;
			System.out.println(msg);
			Thread.yield();
		}
	}

En este ejemplo, tanto en sistemas preemptivos como no preemptivos la salida será:

Hola, soy Juan y este es mi mensaje 1
Hola, soy Luis y este es mi mensaje 1
Hola, soy Nora y este es mi mensaje 1
Hola, soy Juan y este es mi mensaje 2
Hola, soy Luis y este es mi mensaje 2
Hola, soy Nora y este es mi mensaje 2
Hola, soy Juan y este es mi mensaje 3
Hola, soy Luis y este es mi mensaje 3
...........etc.

Esto es porque en seguida de imprimir estamos liberando al procesador para que pase a otro thread (si hay alguno esperando). Noten la diferencia con el primer caso, sin usar yield(), para sistemas preemptivos: el procesador reparte su trabajo en forma (aparentemente) impredecible, por eso el orden de los mensajes no será el mismo en cualquier máquina o sistema operativo.

Ya lo vimos funcionar, pero sería bueno que lo entendamos! Por eso, vamos paso a paso.

Creando Threads

Thread es una clase básica en Java, que implementa la interface Runnable y dispone de unos cuantos métodos por defecto. Lo importante a tener en cuenta que, para usar Threads, debemos crearlas como instancias y ponerlas a "andar":

		Thread Juan = new Thread (new Amigo("Juan"));
		..............
		Juan.start();
		..............
		Juan.join();

  

Un thread tiene cuatro estados posibles:

creado: ha sido creado mediante new(), pero no se ha puesto en marcha todavía.

activo: está en ejecución, ya sea porque arrancó con start() o fue "despertado" con resume().

dormido: ha sido suspendida su ejecución momentáneamente mediante wait(), sleep() o suspend().



Usuarios que han visto este tema también han visto...

- Extendiendo el Runtime de Java con nuevos idiomas
- Leer fichero de texto con Java
- Clases e instancias en Java.
- ¿Qué es el path y el classpath de Java?
- Java en Hebras


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 07-09-2008 a las 03:01:11