class BackgroundThreadPoster {

    public void post(Runnable runnable) {
        mThreadPoolExecutor.execute(runnable);
    }

}

class BackgroundThreadPosterTest {

    private static final int TEST_TIMEOUT_MS;
    @ClassRule
    public final static Timeout TIMEOUT;
    private BackgroundThreadPoster SUT;

    @Test
    public void execute_multipleRunnablesIndependent_executionSuccessful() throws Exception {

        // Arrange
        final Semaphore semaphore = new Semaphore(-1);
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                semaphore.release();
            }
        };
        Runnable runnable2 = new Runnable() {
            @Override
            public void run() {
                semaphore.release();
            }
        };
        // Act
        SUT.post(runnable1);
        SUT.post(runnable2);
        // Assert
        semaphore.acquireUninterruptibly();
    }

}