[concurrency-interest] JNI signaling back to a thread/concurrentstructure?

David Holmes davidcholmes at aapt.net.au
Tue Jul 14 05:21:20 EDT 2015


Hi Andrew,

Andrew Lentvorski writes:
> This is probably a really stupid question, but is there a way to signal
> a java.util.concurrent structure from native code that would allow a JNI
> function to effectively "wake" a sleeping/blocked Java thread?
>
> The context is this.  I have a JNI audio callback trucking along in
> OpenSL on Android.  That callback is running in some sort of system
> thread with highly elevated priority.  A Java thread fills a buffer
> which the audio callback empties.  When the circular buffer is full, the
> Java thread which fills that buffer goes to sleep for a bit until the
> buffer empties out some.
>
> However, if something is going wrong and the circular audio buffer is
> about to empty, I would like to do something that would wake up the Java
> thread or at least queue it on a relatively soon timeslice.  Maybe it
> can recover and maybe it can't, but without the ability to signal that,
> the thread is going to stay asleep and the audio buffer will drain.
>
> Now, I can just wake the thread up every so many milliseconds, but
> that's kind of wasteful of power, CPU, etc. as the majority of the time
> the thread is just going to wake up to see that the buffer is fine,
> realize it has no work and go back to sleep.
>
> Any suggestions?  Or am I just completely barking mad for wanting this?

Use JNI to invoke Thread.interrupt. That will unblock the sleep, or most
other concurrency-based blocking mechanisms.

David

> Thanks,
> -a
>
>
>
>



More information about the Concurrency-interest mailing list