package net.hopeisagoodthing.handlerthreadexample; import android.util.Log; import java.util.concurrent.CountDownLatch; public class ThreadMonitor implements Monitor { private static final String TAG = ThreadMonitor.class.getSimpleName(); private final CountDownLatch countDownLatch; private ClosableThread closableThread; public ThreadMonitor(final int requestCount) { this.countDownLatch = new CountDownLatch(requestCount); } @Override public void onStarted(ClosableThread closableThread) { synchronized (this) { this.closableThread = closableThread; new Thread(new Runnable() { @Override public void run() { try { Log.i(TAG,"onStarted: wait."); countDownLatch.await(); } catch (InterruptedException e) { Log.e(TAG,"monitor is interrupted.", e); } close(); } }).start(); } } void close() { if(closableThread != null) { closableThread.close(); } } @Override public void onProcessed(String request) { synchronized (this) { Log.i(TAG,"onProcessed: " + request); countDownLatch.countDown(); } } }