¿Por qué ReentrantLock no funciona mientras el trabajo sincronizado en la demostración?

Estoy tratando de seguir el ejemplo de ReentrantLock en Java, Diferencia entre el tipo de tutorial sincronizado vs ReentrantLock . Y he comenzado con una demostración -eade como

public class ReentrantLockZero {
    private static ReentrantLock CountLock = new ReentrantLock();
    private static int count = 0;
    private static final int RESULT_COUNT = 10_000;

    public static void main(String... args) throws Exception {
        ThreadPoolExecutor threadPoolExecutor = getMyCachedThreadPool();
        for (int i = 0; i < RESULT_COUNT; ++i) {
            threadPoolExecutor.submit(ReentrantLockZero::getCount);
            threadPoolExecutor.submit(ReentrantLockZero::getCountUsingLock);
        }
        threadPoolExecutor.shutdown();
        threadPoolExecutor.awaitTermination(10, TimeUnit.SECONDS);
        assert count == RESULT_COUNT * 2;
    }

    private static synchronized int getCount() {
        count++;
        System.out.println(Thread.currentThread().getName() + " counting in synchronized: " + count);
        return count;
    }

    private static int getCountUsingLock() {
        CountLock.lock();
        try {
            count++;
            System.out.println(Thread.currentThread().getName() + " counting in lock: " + count);
            return count;
        } finally {
            CountLock.unlock();
        }
    }
}

Cuando lo use ReentrantLockcomo el segundo método getCountUsingLock, obtendré java.lang.AssertionErrorpero cuando los comente para usar synchronized, estaría bien.

Teniendo en cuenta su Re entrantLock, quité el CountLockdefinido en la clase y el uso de bloqueo local de la siguiente manera, pero todavía no funciona.

private static int getCountUsingLock() {
    ReentrantLock countLock = new ReentrantLock();
    countLock.lock();
    try {
        count++;
        System.out.println(Thread.currentThread().getName() + " counting in lock: " + count);
        return count;
    } finally {
        countLock.unlock();
    }
}

¿Cuál es el punto perdido aquí?

Cualquier ayuda será apreciada;)

Respuesta 1

Estoy usando docx4j para analizar el archivo docx. Descargué todos los archivos JAR del sitio docx4j descargas docx4j del sitio. Cuando lo usé en el código, aparece un error de tiempo de ejecución en la primera línea de código: - WordprocessingMLPackage ...

así que he estado tratando de descifrar este código durante los últimos días y no llego a ninguna parte. Esto es lo más lejos que tengo, pero ahora no muestra la matriz ordenada final y ningún código que ...

Necesito arreglar el método getLineNumberFor para devolver un 1 si el primer carácter del apellido está entre A y M o devolver 2 si está entre N y Z. Suena fácil en mi cabeza pero no estoy seguro de qué ...

Si las palabras mayúsculas consecutivas están en un documento "SOY TODO MAYÚSCULAS", lo que devuelvo son cuatro palabras mayúsculas separadas. Lo que necesitaría es devolver toda la mayúscula "SOY ALL MAYÚSCULAS". Como hacer ...