Вы можете использовать любую блокировку, которую вы предпочитаете в C, и сделать ее доступной для Java через JNI.
Вы также можете сделать обратное, вызывая метод в Java из C, чтобы использовать блокировку.
Я бы сделал это изначально в рамках, которые создали поток.