آشنایی با نحوۀ کنترل ترتیب اجرای تِرِدها در زبان برنامه‌نویسی جاوا


در آموزش‌ گذشته با مفاهیم تِرِد و مالتی‌تِرِدینگ در زبان برنامه‌نویسی جاوا آشنا شده و نحوۀ ایجاد دو تِرِد و اجرای آن‌ها به صورت هم‌زمان را آموختیم اما در این آموزش قصد داریم تا روشی به منظور کنترل ترتیب اجرای تِرِدهای برنامه ارائه نماییم. همان‌طور که در آموزش آشنایی با مفهوم Thread در زبان برنامه‌نویسی جاوا توضیح دادیم، دو روش برای ساخت تِرِد در زبان جاوا وجود دارد که در این آموزش از روش اول به منظور ایجاد تِرِدها استفاده کرده و بدین ترتیب یکسری کلاس جهت ارث‌بری از کلاس Thread زبان جاوا تعریف کرده و در ادامه نحوۀ کنترل ترتیب اجرای تِرِدها را مورد بررسی قرار خواهیم داد.

در همین راستا، ابتدا پروژه‌ای تحت عنوان ControllingThreadExecution در محیط برنامه‌نویسی اکلیپس ایجاد کرده و در آن کلاسی به نام HowToControlThreads می‌سازیم به طوری که در کد زیر داریم:

public class HowToControlThreads extends Thread {
    @Override
    public void run() {
        System.out.println("This is text from first thread 1");
        System.out.println("This is text from first thread 2");
        System.out.println("This is text from first thread 3");
        System.out.println("This is text from first thread 4");
        System.out.println("This is text from first thread 5");
        System.out.println("This is text from first thread 6");
    }
}

در کد فوق، ابتدا نام کلاس را نوشته و در ادامه کیورد extends سپس نام کلاس Thread را نوشته‌ایم که بدین ترتیب کلاس HowToControlThreads از کلاس Thread ارث‌بری کرده و در ادامه متد ()run از این کلاس را جهت پیاده‌سازی دستورات مد نظر خود اُورراید کرده‌ایم و در آن دستوراتی مبنی بر چاپ استرینگ‌های فوق را نوشته‌ایم که در صورت فراخوانی متد ()run استرینگ‌های مربوطه را در کنسول نمایش می‌دهد.

این بخش از محتوا مخصوص کاربرانی است که ثبت‌نام کرده‌اند.
جهت مشاهدهٔ این بخش از محتوا لاگین نمایید.

در این آموزش ابتدا به بررسی ترتیب اجرای تِرِدها در برنامه‌های پرداختیم که به صورت مالتی‌تِرِد اجرا می‌شوند سپس به منظور کنترل ترتیب اجرای تَسک‌ها توسط تِرِدهای ایجادشده، اینترفیسی تحت عنوان ExecutorService را معرفی کرده و گفتیم که جهت دسترسی به متدهای پیاده‌سازی‌شدۀ این اینترفیس، به کلاس Executors مراجعه کرده و متدهای مورد نیاز خود را فراخوانی می‌نماییم. در ادامه، متد ()newSingleThreadExecutor را فراخوانی کردیم که این وظیفه را دارا است تا یک تِرِد ایجاد کرده و اجرای تمامی تَسک‌های برنامه را محدود به آن تِرِد نماید.

دانلود فایل‌های تمرین


بهزاد مرادی

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
hamid.d.moghad
hamid.d.moghad
۱۳۹۷/۰۵/۲۱
همه فصل ها تا اینجا خوب بودن الا این فصل 13 . کلا از این فصل هیچی نفهمیدم. تو این خط کد
ExecutorService myController = Executors.newSingleThreadExecutor();
بعد از نوشتن اکسکیوتر و زدن نقطه هیچ متدی برام نمایش داده نمیشه و خودم هم که متد رو دستی میزنم ارور میگیره. در ضمن کلاسش رو هم ایمپورت کردم و لی در این قسمت به مشکل برخوردم.
muhamad64
muhamad64
۱۳۹۷/۰۱/۱۸
کلا توضیحات خیلی خوب است
ولی این مبحث برای من سخت است
متوجه نشدم چرا در متد run مجدد run را فرا میخواند کاری با بحث super ندارم لطفا راهنمایی نمایید
@HOSEIN@
@HOSEIN@
۱۳۹۴/۱۲/۲۱
باسلام وخسته نباشید.
من به یه مشکلی برخوردم
آقابهزادشماتو اول فصل3گفتیدازروی interface هانمیشه object ساخت
ولی تواین بخش گفتید :
بایستی نام شیئ ساخته شده از روی Interface یی تحت عنوان ExecutorService را بنویسیم
من آخرمتوجه نشدم میشه ازروی interfaceها object ساخت یانه,اگه میشه راهناییم کنید
باتشکر
کاربر میهمان
masoudمن یک کاربر مهمان هستم
۱۳۹۴/۱۱/۱۷
سلام، خسته نباشید.
اینجا هدف از نوشتن super.run(); چی هست ؟ اخه بودو نبودش تاثیری نداره که
مرسی
کاربر میهمان
حمیدمن یک کاربر مهمان هستم
۱۳۹۴/۱۰/۰۹
سلام
قبل از اعمال ExecutorService هم هر چند بار که برنامه را اجرا می کنم تمام تردها را به ترتیب پرینت می گیرد !! چرا این گونه است؟!!!