پرش به محتوای اصلی
مسیر تخصصی جاوا و Spring
درخواست پروژهارتباط با ماراهنما
جاواپرو v1.1.2یاد بگیر، تمرین کن، حرفه‌ای بساز
خانهدوره‌هاآموزش رایگانوبلاگمدرس‌هاخدمات
خانهچندنخی(Multithreading) در زبان برنامه نویسی جاوا
آموزش برنامه نویسی »

چندنخی(Multithreading) در زبان برنامه نویسی جاوا

مبحث چندنخی(Multithreading) در زبان برنامه نویسی جاوا به زبانی آسان و ساده آموزش داده شده است.

۱۴ دقیقه مطالعهآموزش برنامه نویسی »آموزش جاوا و انجام پروژه های برنامه نویسی
چندنخی(Multithreading) در زبان برنامه نویسی جاوا
محتوای منتخب جاواپرو

خلاصه مطلب

مبحث چندنخی(Multithreading) در زبان برنامه نویسی جاوا به زبانی آسان و ساده آموزش داده شده است.
نوع محتوامقاله آموزشی
موضوعآموزش برنامه نویسی »
زمان مطالعه۱۴ دقیقه
آخرین ویرایش۹ اسفند ۱۴۰۲

فهرست جلسات دوره مقدماتی جاوا

مقدمه اول | جاوا چیست؟

مقدمه دوم | تاریخچه جاوا

مقدمه سوم | ویژگی‌های زبان جاوا

جلسه اول | راهنمای دانلود و نصب JDK

جلسه دوم | اجرای یک برنامه جاوا در Notepad

جلسه سوم | راهنمای دانلود و نصب Eclipse

جلسه چهارم | ساخت اولین برنامه جاوا در Eclipse

جلسه پنجم | متغیر ها در جاوا

جلسه ششم | تغییر فونت محیط Eclipse

جلسه هفتم | عملگر‌های پایه ای جاوا

جلسه هشتم | دستورات شرطی

جلسه نهم | اشیا و کلاس ها

جلسه دهم | ورودی گرفتن

جلسه یازدهم | حلقه‌های کنترلی

جلسه دوازدهم | کلمه کلیدی static

جلسه سیزدهم | کلاس Math

جلسه چهاردهم | کلاس String

جلسه پانزدهم | آرایه‌های یک بعدی

جلسه شانزدهم | کنترل سطح دسرسی (Modifiers)

جلسه هفدهم | متدها در جاوا

جلسه هجدهم | کلمه کلیدی this

جلسه نوزدهم | کلاس‌های داخلی

جلسه بیستم | ارث بری در جاوا

جلسه بیست و یکم | کلمه کلیدی final

جلسه بیست و دوم | Overriding در جاوا

جلسه بیست و سوم | Polymorphism( چند ریختی)

جلسه بیست و چهارم | چندریختی را بهتر یادبگیرید

جلسه بیست و پنجم | Abstraction( انتزاع)

جلسه بیست و ششم | Encapsulation(کپسوله سازی)

جلسه بیست و هفتم | اینترفیس (Interface)

جلسه بیست و هشتم | کلاس Random

جلسه بیست و نهم | Exceptions (استثناها)

جلسه سی ام | کار با فایل در جاوا(Files and I/O)

جلسه سی و یکم | کلاس InputStreamReader

جلسه سی و دوم | کلاس OutputStreamWriter

جلسه سی و سوم | کلاس BufferedReader

جلسه سی و چهارم | کلاس BufferedWriter

جلسه سی و پنجم | Serialization در جاوا

جلسه سی و ششم | چندنخی(Multithreading)

جلسه سی و هفتم | آرایه دو بعدی در جاوا

جلسه سی و هشتم | کلاس ArrayList در جاوا

جلسه سی و نهم | Non Access Modifier در جاوا

دوره رایگان مقدماتی زبان جاوا
دوره رایگان مقدماتی زبان جاوا

لیست تمامی دوره های آموزش زبان برنامه نویسی جاوا[کــلیک کنید]

همین الان که پشت کامپیوتر خود نشستید و دارید این جلسه از آموزش های جاوا را مطالعه می کنید،سیستم شما دارد چند عمل را همزمان انجام میدهد!! مثلا برنامه PDFReader شما در حال اجرای این کتاب الکترونیکی هستش و احتمالا دارید با یک پخش کننده، موسیقی مورد علاقه خود را گوش می کنید و همزمان مرورگر فایرفاکس رو باز کردید و نکته ای از این کتاب را در گوگل سرچ می زنید و ....کامپیوتر شما همه این کارها رو براتون همزمان انجام می دهد بدون این که شما متوجه شوید!!!یعنی چندین عملیات بصورت همزمان!! چندنخی (Multithreading) در جاوا نیز به همین مفهوم اشاره دارد یعنی اومده که به ما کمک کنه بتوانیم برنامه ای بنویسیم که توانایی این رو داشته باشه که چندین عملیات رو همزمان برامون انجام دهد.

جاوا یک زبان برنامه نویسی چندنخی (Multithreading) است ، یعنی ما می توانیم برنامه های چندنخی (Multithreading)،برنامه هایی که چندین عملیات را همزمان با هم برامون انجام میدن را بنویسیم و توسعه دهیم.

یک برنامه چندنخی شامل دو یا چند بخش است که می توانند بصورت همزمان اجرا شوند.و هر بخش در همان زمان اجرا می توانند کار متفاوتی را انجام دهند.

من نمی خوام زیاد وارد جزییات کار thread ها شوم!!! بیشتر هدف اینه که کاربردشون چیه و چطور ازشون در برنامه مون استفاده کنیم!!جهت آگاهی از جزییات thread ها در گوگل سرچ کنید!!!منابع در این مورد زیاد!! ما میخوایم سریع بریم شراغ کدنویسی :-)

همان طور که گفتیم ،چندنخی (Multithreading) به اجرای همزمان چند بخش از یک برنامه اشاره دارد، این یعنی ما برای هر بخش از برنامه خود یک thread تعریف کرده و این thread ها هستند که همزمان در حال اجرا هستند!!! به همین دلیل به آن Multithreading می گویند.یعنی اجرای همزمان چند thread در برنامه مون. اگر تا اینجا متوجه نشدید اصلا نگران نباشید.سعی می کنیم این مبحث چغر!!! رو به هر ترتیبی شده یاد بگیریم :-)

از مزایا و کاربرد های thread ها در جاوا :

1. چندنخی (Multithreading) کاربر را محدود نمی کند،چرا که تردها (thread ها) هنگام اجرا مستقل از هم هستند و می توانند عملیات های متعدد را همزمان انجام بدهند.

2. با thread ها شما می توانید چندین عملیات را باهم انجام بدید و این باعث صرفه جویی در زمان می شود.

3. همان طور که گفتیم thread ها مستقل از یکدیگر هستند و روی هم تاثیری ندارند مگر استثنایی رخ دهد.

مثال از دنیای واقعی

احتمالا پیش خودتون بگید چقدر داره توضیح میده چرا نمیره سراغ کدنویسی اینم شد آموزش؟! :-)

منم مثل خودتون بی تابم برای رفتن سراغ کدنویسی اما چه کنیم که باید ابتدا مفهوم و کاربرد thread برامون روشن بشه.

خب تا اینجا گفتیم هر بخش از برنامه که بطور همزمان اجرا می شود یک thread می باشد و به اجرای همزمان چند بخش از برنامه یا چند thread ، چندنخی (Multithreading) می گویند.

برای درک بهتر مفهوم و کاربرد thread در برنامه نویسی یک مثال از دنیای واقعی برای شما می زنیم!!

مثال از یک انسان می زنیم!! یک انسان را در نظر بگیرید! یک انسان از چندین بخش تشکیل شده است!!! مثلا بخش شنوایی یا گوش انسان ،بخش بینایی یا چشم انسان،بخش دهان انسان،بخش قلب ،بخش مغز،بخش دست و....

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

اگه بدن انسان را به یک برنامه کامپیوتری تشبیه کنیم! به هر بخش از بدن شما که به طور همزمان یک عملیاتی را انجام می دهند یک thread می گوییم.

در برنامه نویسی هم کاربرد thread همین گونه می باشد،یعنی ما قصد داریم برنامه مون رو از تک بعدی و تک کاره ای خارج کنیم و برنامه ای با استفاده از مفهوم چندنخی بنویسیم که توانایی اجرای همزمان چندین کار را داشته باشد.

مثلا در بدن انسان از مفهوم چندنخی استفاده شده است و ما می توانیم همزمان که قلبمون در حال تپش و پمپاژ خون و معده مان در حال هضم غذا و کلیه هامون در حال تصفیه خون و چشمون در حال دیدن و گوششمون در حال شنیدن هست خم شویم و گوشی هوشمند خود را برداریم و پست جعفر که در اینستاگرام گذاشته رو با انگشت شست لایک کنیم :-)

اگر در بدن انسان از مفهوم چندنخی استفاده نشده بود یک فاجعه رخ می داد!!! یعنی در ساده ترین حالت ممکن که داشتیم با دوستمون صحبت می کردیم ابتدا بخش چشم دوستمون رو میدید بعد که کار دیدن تمام می شد یهویی چشمون بسته می شد و بخش گوش کار می کرد!! بعد که قصد جواب دادن به دوستمون رو داشتیم یهویی بخش گوش غیر فعال میشد و بخش دهان کار میکرد البته اگر شانس اینو داشته باشیم که قلبمون کار و کنه و متوقف نشده باشه :-)

در برنامه نویسی هم مفهوم چندنخی (Multithreading) بسیار مهم و حیاتی برای برنامه ما می باشد. مثلا اگر قصد ساخت یک بازی را داشتیم باید از مفهوم چندنخی استفاده کنیم! چرا که یک بازی باید پاسخ گوی همزمان زدن دکمه های کیبورد توسط کاربر،حرکت اشیای درون بازی، گرافیک بازی و... باشد!!

امیدوارم توانسته باشم با مثال مفهوم چندنخی (Multithreading) را برای شما روشن کنم.

حالا می رویم سراغ مفهوم چندنخی (Multithreading) در زبان جاوا و چگونگی استفاده از آن هنگام کد نویسی :-)

چرخه حیات یک thread (Life Cycle of a Thread) :

یک thread در چرخه حیات خود مراحل مختلفی را طی می کند. برای مثال یک thread متولد می شود،اجرا می شود و سپس می میرد.نمودار زیر چرخه کامل حیات یک thread را نشان می دهد:

مراحل اجرای یک ترد در جاوا
مراحل اجرای یک ترد در جاوا

در زیر مراحل چرخه حیات thread را بررسی می کنیم:

New (متولد شدن):

در این مرحله یک thread جدید ایجاد کرده و چرخه حیات thread ایجاد شده شروع می شود.در این مرحله thread فقط متولد یا ایجاد شده است و هیچ کار دیگه ای نمی کند و در همین حالت باقی می ماند.

Runnable(اجرا کردن):

در این مرحله thread تازه متولد شده به حالت آماده به اجرا در می آید.thread در این حالت برای اجرای وظیفه ای در نظر گرفته می شود.

Waiting (در حالت انتظار):

گاهی اوقات یک thread به حالت انتظار می رود.خب چه موقع؟! وقتی که یک thread دیگر در حال اجرای وظیفه ای باشد ،thread اول تا اتمام کار thread دوم به حالت انتظار یا wait می رود و بعد از این که thread دوم انجام وظیفه اش تمام شد thread اول دوباره Runnable یا به وضعیت اجرایی شدن می رود.

مثلا وقتی که دوست شما دارد باهاتون صحبت می کند ،اگر گوش شما را یک thread فرض کنیم که Runnable شده و در وضعیت running قرار گرفته و حرف های دوستتون را می شنود.همزمان که thread گوش شما در حال شنیدن هست ،thread دهان شما در حال wainting یا انتظار قرار گرفته که بعد از اتمام گوش دادن ، thread دهان به وضعیت Runnable در آمده و شروع به حرف زدن می کند و thread گوش به حالت waiting یا انتظار می رود :-)

Dead (مردن یا خاتمه):

یک thread ، Runnable شده هنگامی به وضعیت Dead می رود یا خاتمه پیدا می کند که وظیفه ای که بر دوش داشته تمام شده باشد.

پیاده سازی Thread در جاوا

پیاده سازی thread در جاوا به این گونه است که ما می توانیم کلاس های خود را به یک thread تبدیل سازیم.یعنی کاری کنیم که کلاس های ما یک thread در نظر گرفته شوند.

ایجاد یک Thread با پیاده سازی اینترفیس Runnable :

برای این که کلاس شما یک thread در نظر گرفته شود کافیست در کلاس خود اینترفیس Runnable را پیاده سازی کنید.یعنی اینترفیس Runnable را در کلاس خود implements کنید.

برای تبدیل کلاس خود به یک thread کافیست گام های زیر را بردارید:

گام اول:

اینترفیس Runnable را در کلاس خود implements کنید:

فرض کنید کلاسی بصورت زیر داشته باشیم:

package javalike ;public class Cat {}

حالا قصد داریم کاری کنیم که کلاس Cat یک Thread درنظر گرفته شود.برای این کار اینترفیس Runabble را در کلاس Cat implements می کنیم:

package javalike ; public class Cat implements Runnable { }

گام دوم:

✔ اینترفیس Runnable در بدنه خود یک متد با نام run دارد که شکل نوشتن آن بصورت زیر است:

public void run();

✔ حال طبق مبحث اینترفیس که در جلسات گذشته مطالعه کردیم ،هر کلاسی که یک اینترفیس را implements کرد بلاجبار باید متدهای درون اینترفیس را در بدنه خود پیاده سازی کند.

✔ خب ما در گام اول کلاس Cat را implements به اینترفیس Runabble کردیم ، پس لازم است متد run اینترفیس Runnable را در کلاس Cat پیاده سازی کنیم:

package javalike ;public class Cat implements Runnable { public void run() { }}

✔ همان طور که گفتیم یک thread هنگام ایجاد و در حالت اجرایی شدن وظیفه و عمل مشخصی را انجام می دهد. این وظیفه و عملی که برای thread مشخص می کنیم باید درون متد run قرار گیرد. نتیجه می گیریم که هر دستور لازم الاجرایی که برای thread مشخص می کنیم باید درون متد run قرار گیرد.

✔ حالا ما قصد داریم دستور چاپ پیام "Hello Javalike " را در متد run پیاده سازی کنیم:

package javalike ;public class Cat implements Runnable { public void run() { System.out. print ln("Hello Javalike "); }}

✔ خب اگر ما thread خود را متولد کنیم ، بعدش به مرحله اجرایی شدن برسانیمآن وظیفه ای که thread ما انجام می دهد اجرای دستورات درون متد run می باشد و از آنجایی که دستور ما در درون متد runدر مثال بالا چاپ پیام "Hello Javalike " می باشد ، در محیط کنسول پیام مذکور چاپ می شود.

خب تا این جا چطور بود؟ امیدوارم که واضع و روشن توضیح داده باشم البته هنوز تمام نشده!! بریم سراغ گام بعدی :-)

گام سوم:

در گام سوم نیاز داریم که Thread خود را متولد یا ایجاد کنیم!!! یا به عبارت دیگر در مرحله new قرارش دهیم.ما در اینجا از واژه تولد یا ایجاد Thread استفاده کردیم!

✔ در برنامه نویسی جاوا برای تولد یا ایجاد یک Thread باید از کلاس Thread شی ایجاد کنیم.شبیه شی سازی در حالت عادی از یک کلاس! خب Thread هم یک کلاس آماده در پکیج java.lang می باشد.

✔ پس برای برای تولد یک Thread کافیست از کلاس Thread یک نمونه یا شی ایجاد کنیم.

هنگام شی سازی از کلاس Thread نیاز به صدا زدن سازنده آن داریم.این کلاس سازنده های گوناگونی دارد.یکی از متداول ترین سازنده های آن که ازش استفاده می کنیم بصورت زیر است:

Thread(Runnable arg0, String arg1)

✔ این سازنده دو پارامتر میگیرد، پارامتر اول یعنی arg0 نمونه ای (شی ) از کلاسی است که اینترفیس Runnable را implements کرده باشد.

✔ مثلا از آنجایی که کلاس Cat اینترفیس Runnable را implements کرده ،شی از نوع کلاس Cat می تواند جایگزین پارامتر arg0 شود.بجای arg1 نیز می توانید نامی به بچه Thread تازه متولد شده خود بدهید :-)

خب تغییراتی که به کد مثال کلاس Cat می دهیم بصورت زیر است:

یک متد main برای کلاس Cat تعریف می کنیم و یک شی از نوع کلاس Cat و یک شی از نوع کلاس Thread ایجاد می کنیم:

package javalike ;public class Cat implements Runnable { public void run( ) { System.out. println("Hello Javalike "); } public static void main(String args[]) { Cat cat=new Cat(); Thread thCat= new Thread(cat, "jesi"); } }

• در اینجا یک شی با نام cat از کلاس Cat ایجاد کرده و درون پارامتر اول سازنده کلاس Thread قرار داده ایم. پارامتر دوم سازنده Thread را یک مقدار از نوع String که نام Thread ما را مشخص می کند قرار داده ایم.

• شی thCat که از نوع کلاس Thread می باشد ، Thread تازه متولد شده ما را تشکیل می دهد.

گام چهارم:

همان طور که گفتیم Thread یک کلاس می باشد که دارای ویژگی ها و متدهایی می باشد.یکی از متدهای کلاس Thread بصورت زیر است:

Void start();

✔ بعد از ایجاد یک شی از نوع کلاس Thread و متولد شدن Thread جدید ، نیاز داریم که Thread مان شروع به اجرا شدن کند. برای این کار از طریق شی ساخته شده از نوع Thread متد start را صدا می زنیم با این کار Thread ما شروع به اجرای وظایف خود که در متد ()run برایش مشخص کرده ایم می کند.

✔ پس متد start باعث می شود دستورات درون متد run ، Thread ما اجرا شود.

...ادامه این جلسه آموزشی را می توانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.

آموزش آسان و ساده زبان برنامه نویسی جاوا
آموزش آسان و ساده زبان برنامه نویسی جاوا

این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)لینک دانلود

چندنخی(Multithreading) در زبان برنامه نویسی جاوا
تصویر مرتبط با چندنخی(Multithreading) در زبان برنامه نویسی جاوا
چندنخی(Multithreading) در زبان برنامه نویسی جاوا
تصویر مرتبط با چندنخی(Multithreading) در زبان برنامه نویسی جاوا
برچسب‌هاآموزش برنامه نویسی »آموزش زبان جاوا »آموزش جاوا »چندنخی در جاواآموزش چندنخی در جاواآموزش Multithreading در جاواMultithreading در جاواآموزش thread در جاواترد در جاواthread در جاواکاربرد ترد در جاواکاربرد thread در جاوامتد run در تردمتد start در جاوامتد sleep در جاوا
دسترسی سریع

فهرست مطلب

۱فهرست جلسات دوره مقدماتی جاوا۲مقدمه اول | جاوا چیست؟۳مقدمه دوم | تاریخچه جاوا۴مقدمه سوم | ویژگی‌های زبان جاوا۵جلسه اول | راهنمای دانلود و نصب JDK۶جلسه دوم | اجرای یک برنامه جاوا در Notepad۷جلسه سوم | راهنمای دانلود و نصب Eclipse۸جلسه چهارم | ساخت اولین برنامه جاوا در Eclipse۹جلسه پنجم | متغیر ها در جاوا۱۰جلسه ششم | تغییر فونت محیط Eclipse۱۱جلسه هفتم | عملگر‌های پایه ای جاوا۱۲جلسه هشتم | دستورات شرطی۱۳جلسه نهم | اشیا و کلاس ها۱۴جلسه دهم | ورودی گرفتن۱۵جلسه یازدهم | حلقه‌های کنترلی۱۶جلسه دوازدهم | کلمه کلیدی static۱۷جلسه سیزدهم | کلاس Math۱۸جلسه چهاردهم | کلاس String۱۹جلسه پانزدهم | آرایه‌های یک بعدی۲۰جلسه شانزدهم | کنترل سطح دسرسی (Modifiers)۲۱جلسه هفدهم | متدها در جاوا۲۲جلسه هجدهم | کلمه کلیدی this۲۳جلسه نوزدهم | کلاس‌های داخلی۲۴جلسه بیستم | ارث بری در جاوا۲۵جلسه بیست و یکم | کلمه کلیدی final۲۶جلسه بیست و دوم | Overriding در جاوا۲۷جلسه بیست و سوم | Polymorphism( چند ریختی)۲۸جلسه بیست و چهارم | چندریختی را بهتر یادبگیرید۲۹جلسه بیست و پنجم | Abstraction( انتزاع)۳۰جلسه بیست و ششم | Encapsulation(کپسوله سازی)۳۱جلسه بیست و هفتم | اینترفیس (Interface)۳۲جلسه بیست و هشتم | کلاس Random۳۳جلسه بیست و نهم | Exceptions (استثناها)۳۴جلسه سی ام | کار با فایل در جاوا(Files and I/O)۳۵جلسه سی و یکم | کلاس InputStreamReader۳۶جلسه سی و دوم | کلاس OutputStreamWriter۳۷جلسه سی و سوم | کلاس BufferedReader۳۸جلسه سی و چهارم | کلاس BufferedWriter۳۹جلسه سی و پنجم | Serialization در جاوا۴۰جلسه سی و ششم | چندنخی(Multithreading)۴۱جلسه سی و هفتم | آرایه دو بعدی در جاوا۴۲جلسه سی و هشتم | کلاس ArrayList در جاوا۴۳جلسه سی و نهم | Non Access Modifier در جاوا
ادامه مسیر

پیشنهاد جاواپرو

موضوع را با آموزش‌های مرتبط ادامه دهید و نکته‌های کاربردی را در مسیر خود نگه دارید

مشاهده دوره‌ها
مطالب پیشنهادی

ادامه مطالعه

xدسته‌بندی نشده
۱۱ دی ۱۳۹۸ مطالعه کوتاه

x

پادکست شماره 3 – راه های کسب درآمد از برنامه نویسی

مطالعه مطلب
پادکست شماره 3 - راه های کسب درآمد از برنامه نویسیپادکست
۲۹ اردیبهشت ۱۴۰۴ مطالعه کوتاه

پادکست شماره 3 - راه های کسب درآمد از برنامه نویسی

در این پادکست برنامه نویسی به شیوه ها و راه های کسب درآمد از برنامه نویسی پرداخته ایم. یک کاغذ و قلم بردارید و به پادکست گوش بدید.

مطالعه مطلب
پادکست شماره 2 - چگونه وارد فضای برنامه نویسی شویم؟پادکست
۲۹ اردیبهشت ۱۴۰۴ مطالعه کوتاه

پادکست شماره 2 - چگونه وارد فضای برنامه نویسی شویم؟

در این پادکست برنامه نویسی یاد میگیریم که چگونه وارد فضای برنامه نویسی شویم و تخصص برنامه نویسی را به دست آوریم.

مطالعه مطلب
جاواپرومرجع تخصصی یادگیری و توسعهٔ جاوا

تجربه‌ای منظم، ساده و حرفه‌ای برای یادگیری عمیق جاوا، Spring و مهندسی نرم‌افزار؛ قابل استفاده در موبایل، تبلت و دسکتاپ

یادگیری

همه دوره‌هاآموزش رایگانمسیر یادگیریمدرس‌ها

جاواپرو

درباره ماخدمات تخصصیدرخواست پروژهبلاگ فنی

پشتیبانی

تماس با ماپرسش‌های متداولقوانین و حریم خصوصیثبت تیکت
خرید امنپرداخت فقط در درگاه رسمیپشتیبانی آموزشیمسیر ارتباط شفاف و پیگیری‌پذیردسترسی پایداروب‌اپ واکنش‌گرا روی همه دستگاه‌ها
© ۱۴۰۵ جاواپرو؛ همه حقوق محفوظ استتوسعه توسط پایاپینگ
خانهدوره‌هاسبد