FARA_JAVA Telegram 69
✳️ آشنایی مقدماتی با 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 — مطالب و آموزش‌های برنامه‌نویسی جاوا فرادرس




tgoop.com/Fara_Java/69
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

How to create a business channel on Telegram? (Tutorial) Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. How to create a business channel on Telegram? (Tutorial) Image: Telegram.
from us


Telegram Fara_Java | فرا جاوا: آموزش برنامه‌نویسی جاوا
FROM American