/** * */ package com.tddinaction.concurrency.threadsafety; import java.util.concurrent.CyclicBarrier; public class SynchedThread extends Thread { private CyclicBarrier entryBarrier; private final CyclicBarrier exitBarrier; public SynchedThread(Runnable runnable, CyclicBarrier entryBarrier, CyclicBarrier exitBarrier) { super(runnable); this.entryBarrier = entryBarrier; this.exitBarrier = exitBarrier; } @Override public void run() { try { entryBarrier.await(); super.run(); exitBarrier.await(); } catch (Exception e) { throw new RuntimeException(e); } } }