برنامه نویسی 246 بازدید

در این مقاله کوتاه با روش متوقف ساختن یک نخ جاوا یا همان Thread جاوا آشنا خواهیم شد. این کار از زمان منسوخ شدن متد ()Thread.stop دیگر به آن سادگی‌ها نیست. دلیل حذف این متد آن است که در پاره‌ای موارد منجر به از کار افتادن اشیای نظارت ‌شده می‌شد. با ما همراه باشید تا با روش توقف نخ در جاوا آشنا شوید.

استفاده از فلگ

کار خود را از کلاسی آغاز می‌کنیم که یک نخ را ایجاد و آغاز می‌کند. این وظیفه به صورت خودکار پایان نمی‌یابد و از این رو باید روشی برای متوقف کردن نخ پیدا کنیم. به این منظور از یک فلگ اتمی استفاده می‌کنیم:

به جای این که یک حلقه While داشته باشیم که یک ثابت را به صورت true ارزیابی کند، از یک AtomicBoolean استفاده می‌کنیم و به این ترتیب می‌توانیم اجرا را با تعیین مقدار true یا false آغاز یا متوقف کنیم. استفاده از یک متغیر AtomicBoolean موجب می‌شود که از بروز تداخل در تنظیم و بررسی متغیر از روی نخ‌های مختلف جلوگیری کنیم.

متوقف ساختن نخ

زمانی که متد ()sleep روی یک بازه طولانی تعیین می‌شود یا زمانی که منتظر یک lock هستیم که شاید هرگز آزاد نشود، چه اتفاقی رخ می‌دهد؟ در این موارد با ریسک مسدودسازی برای مدتی طولانی یا کلاً عدم خاتمه تمیز مواجه می‌شویم. در این موقعیت‌ها می‌توانیم یک متد ()interrupt ایجاد کرده و چند متد و یک فلگ جدید به کلاس اضافه کنیم:

بدین ترتیب متد ()interrupt را که فلگ running را روی مقدار false تنظیم می‌کند اضافه کرده و متد ()interrup نخ ورکر را فرا می‌خوانیم. اگر نخ در زمان این فراخوانی در حالت sleeping باشد، متد ()sleep با یک InterruptedException مانند هر فراخوانی مسدودسازی دیگر خارج می‌شود. بدین ترتیب نخ به حلقه بازمی‌گردد و زمانی که running روی flase تنظیم شود، خارج خواهد شد.

سخن پایانی

در این راهنمای کوتاه، به بررسی شیوه استفاده از متغیرهای اتمی پرداختیم، و آن‌ها را به صورت اختیاری با یک فراخوانی به ()interrupt ترکیب کردیم تا یک نخ را به روش تمیزی متوقف کنیم. این روش ترجیح بیشتری نسبت به فراخوانی متد منسوخ‌شده ()stop و پذیرش ریسک قفل شدن نخ رأی همیشه و از دست رفتن حافظه است.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *