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:

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.