گاهی اوقات در برنامههای چندنخی threadها باید به نوعی با هم ارتباط برقرار کنند. فرض کنید یک thread در حال اجرای کدی درون یک متد synchronized است و نیاز به دسترسی به منبعی (مثلا یک فایل) دارد که این منبع فعلا در دسترس نیست. از طرفی اگر thread منتظر باشد تا منبع در دسترس شود باعث میشود که بقیه threadها نتوانند به متد synchronized دسترسی پیدا کنند و این مسئله میتواند باعث منتظر ماندن چند thread و در نتیجه کندی برنامه شود.
راه بهتر برای سناریویی که گفته شد این است که thread ای که منتظر در دسترس شدن منبع است، بصورت موقت کنترل شی را رها کند تا شی unlock شود و دیگر thread ها بتوانند به متد synchronized دسترسی پیدا کنند و وقتی منبع در دسترس قرار گرفت به thread اولی اطلاع داده شود تا بتواند به کار خود ادامه دهد و به منبع دسترسی پیدا کند.