Assuming you have multiple computing threads and one collector thread. All you need is :
1) a collector thread that wakes up every 1000 ms from a sleep (to be simplistic) for example.
2) The collector thread picks up items "produced" by computing threads while it was sleeping
3) computing threads do their *best effort* to compute and publish
4) if compute threads take too long to produce the collector thread will have nothing to do and can go back to sleep
5) the sleep time makes the whole thing time bounded and not costly from a multi threading point of view
If you try to do it all within the same thread you will introduce a lot of unnecessary complexity as well as calling System.mili multiple times to stay in time !