ورود

View Full Version : سوال: توقف کامل ترد



sds1920
چهارشنبه 30 مهر 1393, 12:18 عصر
سلام.
من میخواستم یه راهی پیدا کنم برای اینکه یک thread رو بلافاصله متوقف کنم.ولی هر چه تلاش کردم نشد.
من یک ترد دارم که کدش رو در زیر میبینید.این ترد 25 ثانیه توقف می کنه و بعد یکسری کار انجام می ده و دوباره این چرخه رو طی میکنه.حالا من می خوام برای مثال زمانی که برنامه بسته شد این ترد رو هم بلافاصله متوقف کنم.توی C# این کار با متد Abort انجام می شه ولی توی جاوا من هر کاری می کنم نمی شه.البته من روشهایی رو دیدم که یک متغییر boolean رو به عنوان شرط حلقه قرار می دن و بعد false می کنن تا حلقه اجرا نشه و ترد تموم بشه، ولی من قصدم این هست که ترد بلافاصله متوقف بشه.نه اینکه 25 ثانیه صبر کنه و بعد اگر متغییر true بود ادامه بده و اگر نه کار تموم بشه.


Runnable func = new Runnable()
{
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(25000);

// Do somthings
} catch (InterruptedException e)
{
}
}
}
};

omidbizdotcom
چهارشنبه 30 مهر 1393, 15:43 عصر
اگه سوالتو درست متوجه شده باشم


http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html




public void run() {
Thread thisThread = Thread.currentThread();
while (blinker == thisThread) {
try {
Thread.sleep(interval);

synchronized(this) {
while (threadSuspended && blinker==thisThread)
wait();
}
} catch (InterruptedException e){
}
repaint();
}
}

public synchronized void stop() {
blinker = null;
notify();
}

sds1920
چهارشنبه 30 مهر 1393, 21:49 عصر
اگه سوالتو درست متوجه شده باشم


http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html




public void run() {
Thread thisThread = Thread.currentThread();
while (blinker == thisThread) {
try {
Thread.sleep(interval);

synchronized(this) {
while (threadSuspended && blinker==thisThread)
wait();
}
} catch (InterruptedException e){
}
repaint();
}
}

public synchronized void stop() {
blinker = null;
notify();
}

ممنون دوست عزیز ولی چون من توی جاوا تازه کار هستم لطف کنید و کمی توضیح هم در مورد کد بالا بدید.
با تشکر.

L u k e
دوشنبه 05 آبان 1393, 00:22 صبح
با متد intrupt ترد می تونی این کار و انجام بدی