اذهب إلى المحتوى
  • 0

كيف اوقف thread في جافا؟

khaled0mohammed

السؤال

Recommended Posts

  • 0

يمكننا إيقاف thread باستخدام ثلاث طرق :

  • Sleeping
  • Waiting
  • Blocked

sleep تستخدم لتأخير تنفيذ thread لبعض الوقت فقط.

مثال:

Thread. Sleep (2000) // ياخير الثريد 2 ملي من الثاينة
public class ExampleThread implements Runnable{
  public static void main (String[] args){
    Thread t = new Thread ();
    t.start ();
  }
  public void run(){
  try{
  Thread.sleep(2000);
  }catch(InterruptedException e){
  }
}

هذا مثال بسيط يوضح لك استخدام الدالة sleep 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

في حال كنت تتعامل مع الكلاس Thread، فيمكنك استخدام الدالة ()stop، حيث تقوم هذه الدالة بإنهاء تنفيذ الخيط  (Thread) الذي قام باستدعائها.
مثال:

public class JavaStopExp extends Thread  
{    
    public void run()  
    {    
        for(int i=0; i<4; i++)  
        {    
            try  
            {  
                // إيقاف الخيط لمدة 100 ميلي ثانية
                sleep(100);  
                // طباعة اسم الخيط الحالي
                System.out.println(Thread.currentThread().getName());    
            }catch(InterruptedException e){System.out.println(e);}    // التقاط الاستثناء في حال تم رميه
            System.out.println(i);    
        }    
    }    
    public static void main(String args[])  
    {    
        // إنشاء الخيط  
        Ex th=new Ex ();     
        // تشغيل الخيط 
        th.start();  
        // إيقافه
        th.stop();  
        System.out.println("Thread th is stopped");    
    }    
}

ملاحظات:

  1. هذه الدالة لاتُعيد أي قيمة.
  2. هذه الدالة تمتلك وسيط واحد (اختياري):
    public final void stop(Throwable obj)  

    حيث أن obj يمثل الكائن القابل للرمي (Throwable) المراد رميه.

  3. هذه الدالة ترمي الاستثناء SecurityException إذا كان الخيط الحالي لايمكنه تعديل الخيط.

  4. بعد إيقاف الخيط لايمكنك إعادة تشغيله من خلال الدالة start.

في حال كنت تستخدم الواجهة Runable فهنا يمكنك استخدام الدالة interrupt، كما يلي:
يمكن استخدام الدالة interrupt لإيقاف أو استئناف تنفيذ الخيط من خيط آخر. على سبيل المثال، تُقاطع التعليمة التالية الخيط t1 من الخيط الحالي:

t1.interrupt();

في حال كان t1 في حالة إيقاف مؤقت (sleeping)، فإن الاستدعاء السابق سيؤدي إلى رمي الاستثناء InterruptedException. وبالتالي اعتماداً على ماسنكتبه داخل الكتلة catch يمكننا إيقاف الخيط أو جعله يستمر في التنفيذ.
مثال:

public class Ex implements Runnable {
    public void run() {
        for (int i = 0; i <= 9; i++) {
            System.out.println("m" + i);
            try {
                Thread.sleep(1500);
                continue;
            } catch (InterruptedException ex) {
                System.out.println("continue");
            }
        }
    } 
    public static void main(String[] args) {
        // إنشاء الخيط
        Thread t1 = new Thread(new Ex());
        // تشغيله
        t1.start();
        try {
            // إيقاف الخيط لمدة 4000 ميلي ثانية
            Thread.sleep(4000);
            // استدعاء دالىة المقاطعة
            t1.interrupt();

        } catch (InterruptedException ex) { //معالجة الاستثناء   
            //  لاتقم بأي شيئ
        }
 
    }
}

في المثال السابق يقوم الخيط t1 بطباعة رسالة كل 1500 ميلي ثانية، بينما خيط الدالة الرئيسية main يقوم بمقاطعته بعد 400 ميلي ثانية.
يمكنك أيضاً أن تلاحظ أنه في جملة try..catch في الدالة run، يتم متابعة تنفيذ الحلقة بعد أن تتم مقاطعة النيسب، وهذا يعني أن الخيط يستمر تشغيله بينما هو في حالة الإيقاف المؤقت (sleeping).
الآن لو أردنا بدلاً من ذلك أن يتم إيقاف الخيط، فكل ماعلينا فعله هو تعديل جملة try..catch في الدالة run، كما يلي:

try {
    Thread.sleep(1500);
} catch (InterruptedException ex) {
    System.out.println("stop");
    return; // فقط return نقوم بكتابة التعليمة 
}

حيث يؤدي جعل الدالة run تنفذ التعليمة return إلى إنهاء الخيط.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...