Exemplo n.º 1
0
  /** @see net.gaia.taskprocessor.api.processor.Detenible#detener() */
  public void detener() {
    detenido = true;
    // Primero cambiamos el estado de los workers para que terminen
    for (final ParallelWorker internalWorker : internalWorkers) {
      internalWorker.stopRunning();
    }
    // Eliminamos las referencias para el GC
    internalWorkers.clear();

    // Interrumpimos los threads para que no esperen más y terminen inmediatamente
    for (final Thread internalThread : internalThreads) {
      internalThread.interrupt();
    }
    // Eliminamos las referencias para el GC
    internalThreads.clear();

    // Cada thread cancela sus propias tareas pendientes
  }
Exemplo n.º 2
0
  /**
   * Inicializa los workers de este procesador creando también los threads necesarios. Y arranca los
   * threads
   *
   * @param cantidadDeWorkers Cantidad de workers y threads a crear
   */
  @SuppressWarnings("unchecked")
  private void inicializarWorkers(final int cantidadDeWorkers) {
    // Factory para los threads a crear
    final ProcessorThreadFactory threadFactory = ProcessorThreadFactory.create("parallel", this);

    // Creamos el array compartido entre todos los workers
    this.colasCompartidas = new LinkedBlockingDeque[cantidadDeWorkers];

    // Creamos las listas internas para los workers
    this.internalWorkers = new ArrayList<ParallelWorker>(cantidadDeWorkers);
    this.internalThreads = new ArrayList<Thread>(cantidadDeWorkers);

    for (int i = 0; i < cantidadDeWorkers; i++) {
      // Cada worker creado agrega una cola compartida al array
      final ParallelWorker workerCreado = ParallelWorker.create(i, colasCompartidas);
      internalWorkers.add(workerCreado);
      // Creamos también el thread para ejecutarlo
      final Thread threadCreado = threadFactory.newThread(workerCreado);
      internalThreads.add(threadCreado);
    }

    startThreads();
  }