tgoop.com/Fara_Java/69
Last Update:
✳️ آشنایی مقدماتی با Java Phaser — به زبان ساده
در این مقاله به بررسی سازنده Phaser از پکیج java.util.concurrent خواهیم پرداخت. این سازنده شباهت زیادی به سازنده CountDownLatch دارد که به ما امکان میدهد اجرای نخها را هماهنگ کنیم. با این حال Java Phaser در قیاس با CountDownLatch کارکردهای بیشتری دارد.
══ فهرست مطالب ══
○ Phaser API
○ پیادهسازی منطق با استفاده از Phaser API
○ سخن پایانی
🔸 Phaser API
Phaser به ما امکان میدهد که یک منطق بسازیم که در آن نخها باید در مانع منتظر بمانند تا بتوانند وارد گام بعدی اجرا شوند.
به این ترتیب میتوانیم چند فاز اجرا را مدیریت کنیم و از وهله Phaser مجدداً برای هر فاز برنامه استفاده کنیم. هر فاز میتواند چند عدد نخ داشته باشد که منتظر پیشروی به فاز بعدی هستند. در ادامه یک مثال در مورد استفاده از فازها را برسی خواهیم کرد.
نخ برای مشارکت در هماهنگی باید خود را در وهله Phaser با استفاده از متد ()register ثبت کند. توجه کنید که این کار تنها تعداد طرفهای ثبت شده را افزایش میدهد و نمیتوانیم بررسی کنیم آیا نخ کنونی ثبت شده است یا نه. برای پشتیبانی از این امکان باید یک زیرکلاس از پیادهسازی تهیه کنیم.
🔸 پیادهسازی منطق با استفاده از Phaser API
فرض کنید که میخواهیم چند فاز اکشنها را با یکدیگر هماهنگ کنیم. سه نخ فاز نخست را پردازش میکند و دو نخ دیگر نیز به پردازش فاز دوم میپردازند. در ادامه کلاس LongRunningAction را ایجاد میکنیم که اینترفیس Runnable را پیادهسازی میکند:
class LongRunningAction implements Runnable {
private String threadName;
private Phaser ph;
LongRunningAction(String threadName, Phaser ph) {
this.threadName = threadName;
this.ph = ph;
ph.register();
}
@Override
public void run() {
ph.arriveAndAwaitAdvance();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
ph.arriveAndDeregister();
}
}
زمانی که کلاس اکشن ما وهلهسازی شد، با استفاده از متد ()register در اینترفیس Phaser ثبت نام میکنیم. به این ترتیب تعداد نخهایی که از آن Phaser خاص استفاده میکنند، افزایش مییابد.
فراخوانی به ()arriveAndAwaitAdvance موجب خواهد شد که نخ کنونی منتظر مانع بماند. همان طور که قبلاً اشاره کردیم، زمانی که تعداد طرفهای رسیده به مانع برابر با تعداد طرفهای ثبت نام کرده شود، اجرا تداوم خواهد یافت. پس از این که کار پردازش پایان یافت، نخ کنونی از طریق فراخوانی متد ()arriveAndDeregister خود را از ثبت نام خارج میکند.
مطالعه ادامه مطلب 👇👇
🔗 آشنایی مقدماتی با Java Phaser — به زبان ساده — کلیک کنید (+)
📌 کانال اختصاصی آموزشی برنامهنویسی جاوا
آخرین مطالب علمی، مقالات رایگان و ویدئوهای آموزشی برنامهنویسی جاوا را در کانال اختصاصی [@Fara_Java] دنبال کنید. 👇
@Fara_Java — مطالب و آموزشهای برنامهنویسی جاوا فرادرس
BY Fara_Java | فرا جاوا: آموزش برنامهنویسی جاوا

Share with your friend now:
tgoop.com/Fara_Java/69