ورود

View Full Version : سوال: تابع stop و sleep



قله بلند
دوشنبه 07 دی 1388, 18:47 عصر
با سلام
تابع sleep یعنی اینکه نخ برای یک مدتی از کار بیافتد. حالا تابع stop یعنی کلاً نخ از کار بیافتد ؟ یعنی از حالت زنده خارج شود و از دور بیرون رود؟ این دو تابع در مثال ضمیمه آمده اند. من نمی دانم چگونه اجرای این برنامه را تحلیل کنم؟
توضیح: چون کد برنامه به صورت مطلوب در متن قرار نمی گرفت، به صورت ضمیمه آمده است.

قله بلند
دوشنبه 07 دی 1388, 23:51 عصر
یه تحلیلی من می کنم.

1-ابتدا برنامه اجرایش را از تابع main آغاز می کند.
2-نخ جدید تولید می شود ولی هنوز قابل اجرا نیست.
3-تابع start این نخ اجرا می شود. پس تابع run خود به خود اجرا را از سر می گیرد.
4-حلقه تابع run کارش را شروع کرده و وارد try می شود که با یک مکث 2 ثانیه ای رو به رو می شود. یعنی دستورات درون run تا 2 ثانیه دیگر قابل پی گیری نیستند.(؟)
5-برنامه کارش را از دستور بعد از t.start از سر می گیرد و اطلاع می دهد که نخ جدید در حال فعالیت است.
6- برنامه وارد حلقه درون main شده و با مکث 1 ثانیه ای رو به رو می شود.
7-بعد از گذشت 1 ثانیه، نخ تولیده شده به حالت stop می رود.(یعنی در اینجا چه اتفاقی برای نخ ایجاد شده می افتد؟)
8-به نظر می رسد که اجرای تابع stop منجر به رخداد استثنایی شده باشد. دستور درون catch اجرا شده و بلافاصله دستور بعد از catch در حلقه تابع run اجرا می شود.
9-حلقه درون تابع run ، شمارنده را می شمارد و دوباره وارد try شده و با مکث 2 ثانیه ای روبه رو می شود.
10-دوباره برنامه، کارش را به درون تابع main می کشاند و اطلاع می دهد که نخ فعال نیست.
11-دیگه نمی دونم چی می شه و چه اتفاقاتی می افته............

خروجی این برنامه را بعد از اجرا در ادامه آورده ام.
Thread[Thread-0,5,main] is alive?true
stopped with java.lang.threadDeath
Thread[Thread-0,5,main] is very much alive!
Thread[Thread-0,5,main] is alive?false
Thread[Thread-0,5,main] is alive?false
slept comfortably
Thread[Thread-0,5,main] is very much alive!
Thread[Thread-0,5,main] is alive?false
slept comfortably
Thread[Thread-0,5,main] is very much alive!خواهش می کنم راهنمایی کنید چون مغزم دیگه هنگ کرده.