Java : How to return intermediate results from a Thread
You can put the intermediate results in a Blocking Queue so that the results are available to consumer threads as and when they are made available :
private final LinkedBlockingQueue<Result> results = new LinkedBlockingQueue<Result>();@Overridepublic void run() { while (!data.isEmpty()) { for (LocalTime dataTime : data) { if (new LocalTime().isAfter(dataTime)) { results.put(result); } } }}public Result takeResult() { return results.take(); }
Consumer threads can simply call the takeResult
method to use the intermediate results. The advantage of using a Blocking Queue is that you don't have to reinvent the wheel since this looks like a typical producer-consumer scenario that can be solved using a blocking data structure.
Note Here, Result
can be a `POJO that represents the intermediate result object.
You are on the right path. Assuming proper synchronization will be there and you will be getting all your timestamps on time :) You should ideally choose a data structure that doesn't require you to scan through all the items. Choose something like a min heap or some ascending/descending lists and now when you iterate just delete the element from this data store and put it on a Blocking Queue. have a thread that is listening on this queue to proceed further.