Post by Moein Kolivand

Software Engineer @ Tabdeal

فکر می‌کردم اولین چیزی که باید در جاوا کانکارنسی یاد بگیرم، ساختن یک Thread است. اما اولین چیزی که یاد گرفتم این بود که Thread ساختن با صدا زدن run() اتفاق نمی‌افتد. اولین بار که این اشتباه را کردم، انتظار داشتم برنامه روی یک Thread جدید اجرا شود. اما هیچ اتفاقی نیفتاد. همه چیز روی همان Main Thread اجرا شد. همان‌جا فهمیدم تفاوت بین run() و start() فقط تفاوت بین دو متد نیست تفاوت بین اجرای یک متد و ایجاد یک مسیر اجرای جدید در برنامه است. جالب‌تر اینکه این رفتار فقط مخصوص Java نیست و در Python هم run() مستقیماً Thread جدیدی ایجاد نمی‌کند. اما چیزی که برای من در Java جذاب بود، فقط این تفاوت نبود. وقتی بیشتر جلو رفتم، فهمیدم هر Thread در Java یک Lifecycle مشخص دارد از NEW تا TERMINATED. حتی JVM وضعیت لحظه‌ای هر Thread را هم در اختیار برنامه‌نویس قرار می‌دهد. قابلیتی که در Python معادل مستقیمی برای آن وجود ندارد. همین نگاه باعث شد Thread را دیگر فقط یک کلاس نبینم، بلکه آن را یک Execution Path مستقل داخل برنامه تصور کنم. در این مقاله درباره همین تغییر مدل ذهنی نوشته‌ام. اینکه چگونه یک تفاوت به ظاهر ساده بین run() و start()، باعث شد نگاه متفاوتی به Concurrency در Java پیدا کنم. این دومین مقاله از مجموعه معماری کانکارنسی در Java است و در قسمت بعد، سراغ اولین Race Condition واقعی می‌روم که باعث شد خروجی برنامه‌ام هر بار یک عدد متفاوت باشد. لینک مقاله در مدیوم: https://lnkd.in/eDiiRWBW لینک پروژه : https://lnkd.in/e8UdiMpd کانال تلگرام : https://lnkd.in/drdE2p5r

Post content