PDA

View Full Version : وقفه ها در Threadها



F.zeinali
چهارشنبه 02 اسفند 1391, 19:12 عصر
سلام دوستان

زمان که می نویسیم Thread.sleep(); ی Exception میده به نام InterruptedException
می خواستم بدونم دلیل دادن این Exception چیه؟ یعنی چه حالتی به وجود میاد که باعث دادن این Exception میشه؟
ممنون.

L u k e
چهارشنبه 02 اسفند 1391, 20:58 عصر
این Exception زمانی صادر می شه که Thread ای که Sleep شده ، وقفه می خوره

F.zeinali
چهارشنبه 02 اسفند 1391, 21:10 عصر
این Exception زمانی صادر می شه که Thread ای که Sleep شده ، وقفه می خوره
ممنون از جوابتون

حالا در قطعه کد زیر منظور از return خالی چیه؟
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}

و در قطعه کد زیر وظیفه ی throw new InterruptedException(); چیه؟


if (Thread.interrupted()) {
throw new InterruptedException();
}

F.zeinali
چهارشنبه 02 اسفند 1391, 21:16 عصر
و سوال بعد اینکه بعد از thorows شدن این Exception چه کاری انجام میشه ؟
آیا بعد از پایان وقفه داده شده این کدی که بهش وقفه خورده از ادامه قسمتی که بهش وقفه خورده ادمه پیدا میکنه یا نه دوباره همون قطعه کد برای مثال Thread.sleep() دوباره از اول اجرا میشه؟

pro_mvb
چهارشنبه 02 اسفند 1391, 21:44 عصر
و سوال بعد اینکه بعد از thorows شدن این Exception چه کاری انجام میشه ؟
آیا بعد از پایان وقفه داده شده این کدی که بهش وقفه خورده از ادامه قسمتی که بهش وقفه خورده ادمه پیدا میکنه یا نه دوباره همون قطعه کد برای مثال Thread.sleep() دوباره از اول اجرا میشه؟
شما وقتی کدی رو بهش وقفه میدی! مثل این میمونه که 2 ثانیه برنامه صبر میکنه و بقیه قسمت های برنامه (که در thread های دیگه هستن) کارشون رو انجام بدن و بعد دوباره برنامه ادامه کارشو بده!
یعنی مثلا شما 3 خط کد زدی در خط 4 میخوای خود برنامت 2 ثانیه صبر کنه ، صبر میکنه و بعد از صبرش خط بعدیش اجرا میشه.

pro_mvb
چهارشنبه 02 اسفند 1391, 21:47 عصر
در مورد if(thread.interputed) هم میاد چک میکنه اگه thread از کار افتاده باشه یعنی به کارش خاتمه داده باشن ، از برنامه میاد بیرون ! (الیته مطمئن نیستم ولی گمونم همین باشه)

L u k e
چهارشنبه 02 اسفند 1391, 23:38 عصر
وقفه دادن واسه اینه که می خوای روند اجرای Thread رو متوقف کنی.
که این دست خودتونه و باید یه تابع چک می کنید که آیا این تابع وقفه خورده یا نه اگه وقفه خورده دیگه اجرا نکن کدها رو
این throw intrupted exception هم واسه زمانیه که از تابع های تو در تو استفاده می کنی و می خوای زمانی که ترد وقفه خورد دیگه اجرا نشه حالا تنها راه فهمیدن این کار با throw هست