Apply these thread designs, looking for the simplest one that will satisfy your performance requirements. Separate-out cohesive functions with different priorities. Justify the existence of each thread in your design. If you can reduce the thread count and meet response time requirements, do so. In this chapter, you've worked with notification, how lets other objects know that something significant has happened.
Passive notification is simple yet resource-intensive.
Timer-based notification is a useful pattern. Design connotes looking at alternative and picking a reasonable approach. Let each implementer of that interface test for the specific classes of objects it works with.