Java : How to return intermediate results from a Thread Java : How to return intermediate results from a Thread multithreading multithreading

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.