I have some code in C++ for Windows and I intend to port it to Java. But unfortunately it is not so easy as I thought. Could someone help me, please?
Please, take a look at algorithm:
HANDLE hExitEvent;
HANDLE hDataAvailabeEvent;
while(true)
{
WaitForMultipleObjects();
if (hExitEvent is set)
break;
if (hDataAvailabeEvent)
{
process chunk of data;
if (all data processed)
ResetEvent(hDataAvailabeEvent);
}
}
hDataAvailabeEvent can be set from different threads. If all data is processed, then event resets and at calling WaitForMultipleObjects thread will suspend until new data arrives or time for thread exit comes.
I've already seen question Waitformultipleobjects in Java but it's not suitable for my situation because I can't process all new data in 1 cycle iteration and processing spreads over some iterations.
Thanks in advance!
A simple solution which would seem to fulfill your need is something like:
You don't really have any events, but it works more or less the same way. Want to add data to the processing queue? Call
process
and theexecutor
will process yourData
when it is finished with any previous tasks on the queue. Shutting down? Callstop
and theexecutor
will finish process everything on the queue, but will not accept any more work. (If you need a more abrupt end, useExecutorService.shutdownNow
).