@Override public void work() { for (int cant = 0; cant < this.cantToAnalize; cant++) { int positionToAnalize = this.assignedVector.getPositionToAnalize(); if (this.mask.get(positionToAnalize) >= 0) this.assignedVector.set(positionToAnalize, v2.get(positionToAnalize)); this.barrier.subCant(); } return; }
/** Returns the sum of all the elements in this vector. */ public synchronized double sum() { Barrier b = new Barrier(this.dimension()); int dim; ConcurVector vectorResultado = this; ConcurVector vectorAAnalizar = this; while (!(vectorResultado.dimension() == 1)) { if (vectorAAnalizar.dimension() % 2 == 0) { dim = vectorAAnalizar.dimension() / 2; } else { dim = vectorAAnalizar.dimension() / 2 + 1; } vectorResultado = new ConcurVector(dim, this.maxThreads, this.load); for (int i = 0; i < this.maxThreads; i++) new WorkerSum(vectorAAnalizar, this.cantDeElementosAAnalizar(i), b, i, vectorResultado) .start(); vectorAAnalizar = vectorResultado; } return vectorResultado.get(0); }