PDA

View Full Version : مقاله: Thread در جاوا (قسمت اول)



manvaputra
پنج شنبه 28 شهریور 1387, 04:40 صبح
Thread Programming in JAVA


مفاهیم اولیه Thread :

امروزه در دنیای برنامه نویسی در اغلب اوقات ممکن است برنامه ما نیاز به اجرای بخش هایی (Tasks) از خود را در یک واحد زمان داشته باشد. راه حلی که برای این مشکل ارائه شده است مفهومی است که Thread خوانده می شود.


به زبان ساده Thread عبارت است روند اجرای زیر مجموعه ای از یک برنامه با سایر زیر مجموعه های همان برنامه که همگی (از ابتدا تا انتها) بصورت همزمان در حال اجرا می باشند.

جالب است بدانیم در ساختار جاوا هر برنامه حداقل شامل یک Thread می باشد که بطور خودکار در زمان اجرای برنامه توسط JVM اجرا می شود مانند تردی که در زمان ایجاد main شروع می شود و با خاتمه main از بین میرود. شایان ذکر است که میتوان در هنگام لزوم و یا حتی برای بهینه کردن برنامه از تعداد بیشتری ترد استفاده نمود. استفاده از بیش از یک ترد در برنامه را در اصطلاح مالتی تردینگ (Multi Threading) گویند.

استفاده از تردها (Multi Threading) در حد چشم گیری کارآیی برنامه را بالا می برد . فرض کنید شما در حال طراحی یک برنامه پردازشگر متن می باشید طبعا برنامه شما زمانی بهینه و کاربر پسند تر است که قابلیت تایپ پرینت و ذخیره کردن و ... را همزمان در اختیار کاربر قرار دهد یا همان برنامه چت در بخش آموزش های قبلی (TCP (http://barnamenevis.org/forum/showthread.php?t=119875)و UDP (http://barnamenevis.org/forum/showthread.php?t=122366)) را در نظر بگیرید برنامه چت همزمان که در حال ارسال اطلاعات است باید قابلیت دریافت اطلاعات را نیز داشته باشد تمامی این مثال ها به راحتی و با در اختیار گرفتن تردها قابل پیاده سازی می باشند.

مزایای استفاده از مالتی تردینگ:

در بسیاری از حالات استفاده از چندین ترد در برنامه مفید می باشد در ادامه سعی داریم مواردی از مزایای استفاده از این تکنیک را بررسی نماییم:



تعامل بهتر با کاربر:

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



شبیه سازی فعالیت های همزمان:

ترد ها در جاوا به طورت کاملا هم زمان به نظر می رسند با وجودی که بر روی یک پردازشگر از لحاظ فیزیکی در حال اجرا هستند. در واقع پردازشگر یک ترد را برای مدت کوتاهی در حالت اجرا قرار می دهد و در واحد زمان بعدی تردی دیگر را اجرا می کند در واقع واحد های زمانی و حالت اجرا به طور متناوب بین تردهای مختلف در حال سوئیچ شدن می باشد و اینگونه به نظر برسد که هر ترد پردازشگر مخصوص به خود را دارد به زبان ساده می توان گفت یک سیستم چند پردازشگری (Multi Processing) به صورت مجازی ایجاد شده است. با استفاده از این ویژگی شما می توانید چنیدین زیر برنامه مستقل را در واحد زمان فعال نشان دهید در صورتی که در پشت پرده هر یک از آنها درفواصل کوتاه زمانی فعال هستند.



انجام سایر کارها زمانی که منتظر انجام عملیات های وقت گیر ورودی/خروجی هستیم:


عملیات هایی مانند ذخیره و بازیابی اطلاعات روی هارد دیسک و یا تبادل اطلاعات
در شبکه در مقایسه با زمان اجرای یک کد در پردازشگر از سرعت کمتری بر خوردار می باشند .کلاس DataInputStream() از بسته java.io دارای متدی است به نام read() که در هنگام فراخوانی تا زمان دریافت یک بایت یا وقوع استثنای IOException در حالت مسدود (block) قرار می گیرد با این تفاصیل تردی که در آن این متد استفاده شده است در زمان فراخوانی قبل از وقوع دو حالتی که عنوان شد (دریافت بایت یا وقوع استثنا) قادر به انجام هیچ کار دیگری نیست.در این صورت چنانچه برنامه شما بیش از یک ترد داشته باشد در مدتی که یکی از تردها در حالت مسدود یا انتظار قرار دارد بقیه تردها به کار خود ادامه می دهند.

زبان جاوا یکی از بی همتا ترین زبان ها در ارائه مالتی تردینگ به برنامه نویسان می باشد بدون اینکه برنامه نویس را مجبور به استفاده از API های سیستم عامل کند.

برای ایجاد کلاس ترد دو روش پایه وجود دارد:


ایجاد کلاسی که از کلاس ترد ارث بری می کند.
کلاسی که از ترد ارث بری نکرده باشد ولی پیاده سازی آن از نوع Runnable باشد.

ادامه دارد..... (http://barnamenevis.org/forum/showthread.php?t=123261)

ghazal67
چهارشنبه 22 آذر 1391, 19:22 عصر
salam

man to net ziad gashtam peida nakardam mikhoam barname ee ba net beans benevisam ke to har frame ke baz mishe date o time ro neshoon bedam midoonam baiad ba thread benevisam ama chetoorisho nemidoonam .mishe komakam konin?