I dont know any patterns for this, but as an Idea you can devide your collection elements on the number of threads, so each thread gets X Elements to process, for example:
Collection has 20 elements, youc all your function providing 4 Threads then intern you start them like:
thread1 gets the elements [0 .. 4]
thread2 gets the elements [5 .. 9]
thread3 gets the elements [10 .. 14]
thread1 gets the elements [15 .. 19]
Notice that deleting elements from the collection could cause problems then specially thread 4 tries to access element[19] while there are less than 20 elements in your collection.
EDIT:
As brain mentioned depending on the elements process time, this Idea it can be not effecient as if processing one of the first 5 elements took 10 seconds but the other elements only took 0.5 seconds then thread1 would be busy but the other threads would end up not running in parallel for very long.