CC60H Nuevos Lenguajes de Programación: Java
Tarea Nro. 2
Prof. Luis Mateu B.
Un mezclador (clase Merger) es un objeto que recibe enteros aportados
por exactamente 2 threads concurrentes. Cada thread suministra
al mezclador, por medio del método put, una secuencia de palabras
ordenadas alfabéticamente (terminada por una invocación de end).
Por ejemplo uno de los threads podría invocar:
mezcl.put("a"); mezcl.put("b"); mezcl.put("d"); ...; mezcl.end();
Sin embargo, las invocaciones de put que percibe el mezclador no
necesariamente están ordenadas porque provienen de dos threads.
El mezclador mezcla ordenadamente ambas secuencias y entrega el resultado
a un objeto consumidor (clase Consumer), por medio de invocaciones
del método put del consumidor. Cuando ambos threads terminan con
sus secuencias, el mezclador invoca el método end del consumidor.
Parte a.-
Programe la clase Merger de modo que las palabras se entreguen al
consumidor lo antes posible, evitando almacenarlas internamente en el
mezclador. El consumidor se recibe como argumento en el constructor
del mezclador. Preocúpese de evitar toda forma de data race
Las clases Consumer y Merger tienen las siguiente forma:
interface Consumer {
void put(String pal);
void end();
}
class Merger implements Consumer {
Consumer cons;
Merger(Consumer cons) { this.cons= cons; }
public ... void put(String pal) {
...
cons.put( ... );
...
}
public ... void end() { ... }
}
Parte b.-
Escriba un programa ParSort que ordene un conjunto de palabras. Su programa
debe ser invocado de la siguiente manera:
% java ParSort pedro juan diego
diego juan pedro
%
Su programa debe ordenar en paralelo las palabras recibidas en la
línea de comandos de la siguiente manera:
- Particione el conjunto de datos en 2 listas (java.util.List).
- Cree 2 threads concurrentes. Cada thread debe ordenar una
de las listas usando el método
java.util.Arrays.sort(Object[], int desde, int hasta)
.
- Luego mezcle ordenadamente los resultados de ambos threads usando
la clase Merger de la parte a.-.
- Despliegue en pantalla el resultado.
Consulte la documentación de Java que se encuentra accesible
en la página del curso (en particular sobre el método Arrays.sort).
los recursos del curso
Plazo de entrega
La tarea se entrega impostergablemente el día Jueves 2 de Mayo.
Envíenme un mail con un tar o zip con los archivos.