ejemplo java

Páginas: 9 (2018 palabras) Publicado: 1 de abril de 2014
CAPÍTULO 3. PROCESOS VS. HILOS

3.1

Primitivas de sincronización en Java

Java no tiene semáforos como primitivas de sincronización. Sin embargo,
proporciona otras primitivas diferentes con las cuales sí que se puede implementar
el comportamiento de los semáforos. De esta forma, cualquier problema que
pueda ser solucionado con semáforos también podrá ser solucionado con las
primitivaspropias de Java.
En este apartado mostraremos cómo solucionar los problemas de exclusión
mutua y condición de sincronización en Java. Para ello veremos algunos métodos
más del API de Java para tratar threads. Finalizaremos con el ejemplo del
Productor/Consumidor y la simulación de semáforos generales y binarios haciendo
uso de las primitivas de Java.
3.1.1 Exclusión mutua en Java
Pordefecto en Java un objeto no está protegido. Esto quiere decir que cualquier
número de threads puede estar ejecutando código dentro del objeto. La exclusión
mutua en Java se consigue mediante la palabra reservada synchronized. Esta
palabra puede aplicarse tanto a métodos enteros como a bloques de código dentro
de un método.
Synchronized como modificador de método

Un método en Java puede llevarel modificador synchronized. Todos los métodos
que lleven ese modificador se ejecutarán en exclusión mutua. Cuando un método
sincronizado se está ejecutando, se garantiza que ningún otro método
sincronizado podrá ejecutarse. Sin embargo, cualquier número de métodos no
sincronizados puede estar ejecutándose dentro del objeto. En la Figura 1 puede
observarse cómo sólo puede haber un threadejecutando el método 2 o 4
(métodos sincronizados) mientras que puede haber cualquier número de threads
ejecutando el resto de métodos. A la izquierda de la figura se muestra el código
para la misma. Aquellos threads que quieran ejecutar un método sincronizado
mientras otro thread está dentro de un método sincronizado tendrán que esperar a
que éste último abandone la exclusión mutua. La razónnatural de abandonar la
exclusión mutua es la finalización de la ejecución del método, aunque pueden
existir otras como veremos posteriormente.

public class Sincronizados {
public void m1() {
}
public synchronized void m2() {
}

public void m3() {
}
public synchronized void m4() {
}
public void m5() {
}
}

Programación Concurrente

40

t7
t6

Figura 1 Métodos sincronizados yno
sincronizados.

t2

t5
m1

t4

m2
t1
m3
m4

t3

m5
Es como si el objeto tuviese un cerrojo. Cuando un método sincronizado está
ejecutándose el cerrojo está echado y ningún otro método sincronizado puede
ejecutarse. Cuando se libera el cerrojo, entonces alguno de los threads que
estaba esperando por la apertura del cerrojo podrá entrar a ejecutarse (t2 y t6
en la Figura1). Recordemos que este era uno de los estados en los que se
podía encontrar un thread según se vio en el capítulo 2.
Synchronized aplicado a un bloque de código

A veces no interesa que todo el método sea sincronizado, sino una parte de él.
En ese caso synchronized se puede usar sobre un bloque de código en vez de
sobre un método. Para utilizarlo sobre un bloque de código, synchronizednecesita hacer referencia a un objeto. En el ejemplo siguiente se aplica
synchronized sobre el mismo objeto sobre el que se está invocando el método
m1(). Esto hace que ese trozo de código se ejecute en exclusión mutua con
cualquier otro bloque de código sincronizado del mismo objeto, incluido los
métodos que lleven el modificador synchronized.

public class Sincronizados2 {
public void m1() {// cualquier código. Será no sincronizado
synchronized (this) {
// sólo esta parte es sincronizada
}
// cualquier código. Será no sincronizado
}
}

Synchronized aplicado a otro objeto

También es posible aplicar synchronized sobre otro objeto distinto a aquel en el
que se está utilizando. En el ejemplo siguiente, antes de ejecutar el código que

Programación Concurrente

41...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ejemplos java
  • Ejemplo En Java
  • Ejemplo Java
  • Ejemplo de Herencia en Java
  • Ejemplo de clase en Java
  • Ejemplos De Java Script
  • Ejemplo POO en java
  • Java ejemplo 2

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS