--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java 2016/01/31 22:50:31 2892 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java 2016/02/01 07:02:12 2893 @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.Map; import java.util.Queue; -import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; @@ -74,12 +73,12 @@ ServiceConfig conf = ServiceConfig.getInstance(); - try { + try (BarrierMarker marker = new BarrierMarker() ) { while ( ! ikkeDaekkede.isEmpty() ) { if (task.isAborted()) { System.out.println( "Worker/" + workerID + " aborting"); - return; + break; } @@ -155,15 +154,27 @@ } - - try { - logger.info( "Worker/" + workerID + " afventer barrier"); - barrier.await(); - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - } + System.out.println( "Worker/" + workerID + " stopping"); } + + + /** + * Makes sure the barrier is touched correctly no matter how the the current code block is exited. + * @author thn + * + */ + public class BarrierMarker implements AutoCloseable { + @Override + public void close() { + try { + logger.info( "Worker/" + workerID + " afventer barrier"); + barrier.await(); + } catch (Exception e) { + logger.log(Level.SEVERE, e.getMessage(), e); + } + } + } }