CodeGym /جاوا بلاگ /Random-SD /جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن...
John Squirrels
سطح
San Francisco

جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا. حصو 12

گروپ ۾ شايع ٿيل
سلام علم طاقت آهي. توهان جي پهرين انٽرويو ۾ توهان کي وڌيڪ ڄاڻ آهي، وڌيڪ اعتماد توهان محسوس ڪندا. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 12 - 1جيڪڏهن توهان علم سان ڀرپور هڪ وڏو دماغ آڻيو، توهان جي انٽرويو وٺندڙ کي توهان کي پريشان ڪرڻ ڏکيو پئجي ويندو ۽ خوشگوار حيران ٿيڻ جو امڪان آهي. تنهن ڪري وڌيڪ اڊو کان سواء، اڄ اسان جاوا ڊولپر جي سوالن جو جائزو وٺڻ سان توهان جي نظرياتي بنياد کي مضبوط ڪرڻ جاري رکنداسين.

103. وراثت دوران استثنا جي چڪاس تي ڪهڙا ضابطا لاڳو ٿين ٿا؟

جيڪڏهن آئون سوال کي صحيح سمجهان ٿو، اهي وراثت دوران استثناء سان ڪم ڪرڻ لاء قاعدن بابت پڇي رهيا آهن. لاڳاپيل ضابطا هن ريت آهن:
  • نزول/تطبيق ۾ هڪ مٿانهون يا لاڳو ٿيل طريقو چيڪ ٿيل استثنا نه ٿو اڇلائي سگھي ٿو جيڪي اعليٰ درجي/انٽرفيس طريقي ۾ استثناءَ کان اعليٰ درجي ۾ آهن.
مثال طور، فرض ڪريو ته اسان وٽ ڪجھ اينيمل انٽرفيس آھي ھڪڙي طريقي سان جيڪو اڇلائي ٿو IOException :
public interface Animal {
   void speak() throws IOException;
}
جڏهن هن انٽرفيس کي لاڳو ڪري رهيا آهيون، اسان وڌيڪ عام اڇلائڻ واري استثنا (مثال طور استثنا ، اڇلائيبل ) کي ظاهر نه ٿا ڪري سگهون، پر اسان موجوده استثنا کي ذيلي ڪلاس سان تبديل ڪري سگهون ٿا، جهڙوڪ FileNotFoundException :
public class Cat implements Animal {
   @Override
   public void speak() throws FileNotFoundException {
// Some implementation
   }
}
  • ذيلي ڪلاس ڪنسٽرڪٽر جي اڇلائي شق ۾ لازمي طور تي شامل ڪرڻ لازمي آهي سڀئي استثنا ڪلاس شامل آهن سپر ڪلاس ڪنسٽرڪٽر پاران اڇلايا ويا اعتراض ٺاهڻ لاءِ.
فرض ڪريو جانورن جي طبقي جو ٺاھيندڙ ڪيترائي استثنا اُڇلائي ٿو:
public class Animal {
  public Animal() throws ArithmeticException, NullPointerException, IOException {
  }
پوء ھڪڙو ذيلي ڪلاس ٺاھيندڙ پڻ انھن کي اڇلائڻ گھرجي:
public class Cat extends Animal {
   public Cat() throws ArithmeticException, NullPointerException, IOException {
       super();
   }
يا، جيئن طريقن سان، توھان بيان ڪري سگھو ٿا مختلف، وڌيڪ عام استثنا. اسان جي صورت ۾، اسان اشارو ڪري سگھون ٿا Exception ، ڇاڪاڻ ته اهو وڌيڪ عام آهي ۽ سڀني ٽن استثنان جو هڪ عام ابا ڏاڏا آهي جيڪو سپر ڪلاس ۾ ڏيکاريل آهي:
public class Cat extends Animal {
   public Cat() throws Exception {
       super();
   }

104. ڇا توهان ڪجهه ڪوڊ لکي سگهو ٿا جتي آخرڪار بلاڪ تي عمل نه ڪيو ويو آهي؟

پهرين، اچو ته ياد رکون ته آخر ڇا آهي. ان کان اڳ، اسان استثنا کي پڪڙڻ واري ميڪانيزم جي جانچ ڪئي: هڪ ڪوشش بلاڪ نامزد ڪيو جتي استثنا پڪڙيا ويندا، ۽ ڪيچ بلاڪ(ز) ڪوڊ آهن جن کي سڏيو ويندو جڏهن هڪ لاڳاپيل استثنا پڪڙيو ويندو. ڪوڊ جو ٽيون بلاڪ جيڪو نشان لڳل آهي آخرڪار ڪي ورڊ تبديل ڪري سگھي ٿو يا اچي سگھي ٿو ڪيچ بلاڪن کان پوءِ. هن بلاڪ جي پويان خيال اهو آهي ته ان جو ڪوڊ هميشه عمل ڪيو ويندو آهي بغير ڪنهن ڪوشش يا ڪيچ بلاڪ ۾ ڇا ٿئي ( قطع نظر ته ڪو استثنا آهي يا نه). مثال، جتي ھن بلاڪ تي عمل نه ڪيو ويو آھي غير معمولي آھن ۽ اھي غير معمولي آھن. سادو مثال اهو آهي جڏهن System.exit(0) کي سڏيو ويندو آهي آخرڪار بلاڪ کان اڳ، ان ڪري پروگرام کي ختم ڪرڻ:
try {
   throw new IOException();
} catch (IOException e) {
   System.exit(0);
} finally {
   System.out.println("This message will not be printed on the console");
}
اتي پڻ ڪجھ ٻيون حالتون آھن جتي آخرڪار بلاڪ نه ھلندو:
  • مثال طور، نازڪ سسٽم جي غلطين جي ڪري هڪ غير معمولي پروگرام ختم ٿيڻ، يا ڪجهه غلطي جيڪا ايپليڪيشن کي حادثي جو سبب بڻائي ٿي (مثال طور، StackOverflowError، جيڪو ٿئي ٿو جڏهن ايپليڪيشن اسٽيڪ اوور فلو ٿئي ٿي).

  • ٻي صورتحال اها آهي جڏهن هڪ ڊيمون موضوع هڪ ڪوشش ۾ داخل ٿئي ٿو آخرڪار بلاڪ، پر پوء پروگرام جو مکيه موضوع ختم ٿي ويندو آهي. سڀ کان پوء، ڊيمون موضوع پس منظر جي ڪم لاء آهن جيڪي اعلي ترجيح يا لازمي نه آهن، تنهنڪري ايپليڪيشن انهن جي ختم ٿيڻ جو انتظار نه ڪندي.

  • سڀ کان وڌيڪ بي عقل مثال هڪ لامحدود لوپ آهي هڪ ڪوشش يا ڪيچ بلاڪ جي اندر - هڪ ڀيرو اندر، هڪ ڌاڳو اتي هميشه لاءِ ڦاسي ويندو:

    try {
       while (true) {
       }
    } finally {
       System.out.println("This message will not be printed on the console");
    }
هي سوال جونيئر ڊولپر جي انٽرويوز ۾ تمام گهڻو مشهور آهي، تنهنڪري انهن مان ڪجهه غير معمولي حالتن کي ياد ڪرڻ سٺو خيال آهي. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 12 - 2

105. ھڪڙو مثال لکو جتي توھان ھڪڙي ڪيچ بلاڪ ۾ گھڻن استثنا کي ھٿ ڪريو.

1) مون کي پڪ ناهي ته هي سوال صحيح پڇيو ويو هو. جيتري قدر مان سمجهان ٿو، اهو سوال ڪيترن ئي ڪيچ بلاڪ ۽ هڪ واحد ڪوشش ڏانهن اشارو ڪري رهيو آهي :
try {
  throw new FileNotFoundException();
} catch (FileNotFoundException e) {
   System.out.print("Oops! There was an exception: " + e);
} catch (IOException e) {
   System.out.print("Oops! There was an exception: " + e);
} catch (Exception e) {
   System.out.print("Oops! There was an exception: " + e);
}
جيڪڏهن ڪو استثنا ڪوشش واري بلاڪ ۾ اڇلايو وڃي ٿو ، ته پوءِ لاڳاپيل ڪيچ بلاڪ ان کي پڪڙڻ جي ڪوشش ڪن ٿا، ترتيب وار مٿي کان هيٺ تائين. هڪ دفعو استثنا ڪنهن هڪ ڪيچ بلاڪ سان ملندو آهي، باقي ڪو به بلاڪ هاڻي ان کي پڪڙڻ ۽ سنڀالڻ جي قابل نه هوندو. هن جو مطلب اهو آهي ته تنگ استثنا وڌيڪ عام ماڻهن جي مٿان ترتيب ڏنل آهن ڪيچ بلاڪ جي سيٽ ۾ . مثال طور، جيڪڏهن اسان جو پهريون ڪيچ بلاڪ Exception ڪلاس کي پڪڙي ٿو ، ته پوءِ ايندڙ ڪو به بلاڪ چيڪ ٿيل استثنا نه پڪڙي سگهندا (يعني Exception جي ذيلي ڪلاسن سان گڏ باقي بلاڪ مڪمل طور تي بيڪار هوندا). 2) يا شايد سوال صحيح پڇيو ويو. انهي صورت ۾، اسان هيٺ ڏنل استثنا کي سنڀالي سگهون ٿا:
try {
  throw new NullPointerException();
} catch (Exception e) {
   if (e instanceof FileNotFoundException) {
       // Some handling that involves a narrowing type conversion: (FileNotFoundException)e
   } else if (e instanceof ArithmeticException) {
       // Some handling that involves a narrowing type conversion: (ArithmeticException)e
   } else if(e instanceof NullPointerException) {
       // Some handling that involves a narrowing type conversion: (NullPointerException)e
   }
هڪ استثنا کي پڪڙڻ لاءِ ڪيچ استعمال ڪرڻ کان پوءِ ، اسان انسٽانس آف آپريٽر کي استعمال ڪندي ان جي مخصوص قسم کي ڳولڻ جي ڪوشش ڪريون ٿا ، جيڪو چيڪ ڪري ٿو ته ڇا ڪا شئي ڪنهن خاص قسم سان تعلق رکي ٿي. هي اسان کي اجازت ڏئي ٿو اعتماد سان هڪ تنگ قسم جي تبديلي کي بغير ڪنهن منفي نتيجن جي خوف کان. اسان ساڳئي صورتحال ۾ ٻنهي طريقن کي لاڳو ڪري سگهون ٿا. مون سوال تي شڪ جو اظهار فقط ان ڪري ڪيو، جو مان ٻئي آپشن کي سٺو طريقو نه چوندس. منهنجي تجربي ۾، مون ڪڏهن به ان سان منهن نه ڪيو آهي، ۽ پهريون طريقو جنهن ۾ ڪيترن ئي ڪيچ بلاڪ شامل آهن وسيع آهي.

106. ڪهڙو آپريٽر توهان کي اجازت ڏئي ٿو ته زبردستي هڪ استثنا اڇلايو وڃي؟ هڪ مثال لکو

مون مٿي ڏنل مثالن ۾ ڪيترائي ڀيرا ان کي استعمال ڪيو آهي، پر مان ان کي هڪ ڀيرو ٻيهر ورجائيندس: اڇلائي لفظ. دستي طور هڪ استثنا اڇلائڻ جو مثال:
throw new NullPointerException();

107. ڇا مکيه طريقو هڪ استثنا اڇلائي سگھي ٿو؟ جيڪڏهن ائين آهي، ته پوء اهو ڪٿي وڃي ٿو؟

سڀ کان پهريان، مان اهو نوٽ ڪرڻ چاهيان ٿو ته مکيه طريقو هڪ عام طريقو کان وڌيڪ ناهي. ها، ان کي ورچوئل مشين ذريعي سڏيو ويندو آهي هڪ پروگرام جي عمل کي شروع ڪرڻ لاء، پر ان کان سواء، ان کي ڪنهن ٻئي ڪوڊ مان سڏي سگهجي ٿو. ان جو مطلب اهو آهي ته اهو پڻ معمولي قاعدن جي تابع آهي انهي جي باري ۾ اشارو ڪيو ويو استثناء جي نشاندهي ڪرڻ کان پوء اڇلائي لفظ:
public static void main(String[] args) throws IOException {
انهي جي مطابق، اهو استثنا ڏئي سگهي ٿو. جڏهن main کي پروگرام جي شروعاتي نقطي طور سڏيو ويندو آهي (بجائي ڪنهن ٻئي طريقي سان)، پوءِ ان کي اڇلائي ڪنهن به استثنا کي سنڀاليو ويندو UncaughtExceptionHandler . هر ٿريڊ ۾ هڪ اهڙو هينڊلر هوندو آهي (يعني هر ٿريڊ ۾ هڪ اهڙو هينڊلر هوندو آهي). جيڪڏهن ضروري هجي ته، توهان پنهنجو هينڊلر ٺاهي سگهو ٿا ۽ ان کي ڪال ڪري سيٽ ڪري سگهو ٿا پبلڪ static void main(String[] args) throws IOException {setDefaultUncaughtExceptionHandler طريقو عوامي جامد باطل مکيه (String[] args) تي اڇلائي IOException {Thread اعتراض.

ملٽي ٽريڊنگ

جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 12 - 3

108. گھڻن موضوعن واري ماحول ۾ ڪم ڪرڻ لاءِ ڪھڙا ميکانيزم ڄاڻو ٿا؟

جاوا ۾ ملٽي ٿريڊنگ لاءِ بنيادي ميڪانيزم آهن:
  • هم وقت سازي ڪيل لفظ، جيڪو هڪ ٿريڊ لاءِ هڪ طريقو آهي جيڪو هڪ طريقو/بلاڪ کي بند ڪري ٿو جڏهن اهو داخل ٿئي ٿو، ٻين موضوعن کي داخل ٿيڻ کان روڪي ٿو.

  • volatile keyword مختلف موضوعن جي ذريعي پهچايل متغير تائين مسلسل پهچ کي يقيني بڻائي ٿي. اهو آهي، جڏهن هي ترميمي هڪ متغير تي لاڳو ڪيو ويندو آهي، سڀني عملن کي تفويض ڪرڻ ۽ پڙهڻ لاء اهو متغير ايٽمي بڻجي ويندو آهي. ٻين لفظن ۾، سلسلا متغير کي پنهنجي مقامي ياداشت ۾ نقل نه ڪندا ۽ ان کي تبديل ڪندا. اهي ان جي اصلي قيمت کي تبديل ڪندا.

  • هلائڻ لائق - اسان هن انٽرفيس کي لاڳو ڪري سگهون ٿا (جيڪو هڪ واحد رن () طريقو تي مشتمل آهي ) ڪجهه ڪلاس ۾:

    public class CustomRunnable implements Runnable {
       @Override
       public void run() {
           // Some logic
       }
    }

    ۽ هڪ دفعو اسان ان ڪلاس جو هڪ اعتراض ٺاهي سگهون ٿا، اسان پنهنجي اعتراض کي Thread Constructor ڏانهن منتقل ڪري هڪ نئين ٿريڊ شروع ڪري سگهون ٿا ۽ پوءِ start() ميٿڊ کي ڪال ڪري:

    Runnable runnable = new CustomRunnable();
    new Thread(runnable).start();

    شروعات جو طريقو لاڳو ٿيل رن () طريقي کي الڳ موضوع تي هلائي ٿو.

  • موضوع - اسان هن طبقي کي ورثي ۾ آڻي سگھون ٿا ۽ ان جي هلائڻ واري طريقي کي ختم ڪري سگهون ٿا:

    public class CustomThread extends Thread {
       @Override
       public void run() {
           // Some logic
       }
    }

    اسان نئين ٿريڊ کي شروع ڪري سگھون ٿا هن ڪلاس جو هڪ اعتراض ٺاهي ۽ پوءِ start() طريقي کي ڪال ڪري:

    new CustomThread().start();

  • Concurrency - ھي ھڪڙي گھڻائي واري ماحول ۾ ڪم ڪرڻ لاء اوزار جو ھڪڙو پيڪيج آھي.

    اهو مشتمل آهي:

    • سمورو مجموعو - هي مجموعن جو هڪ مجموعو آهي جيڪو واضح طور تي ٺهيل ماحول ۾ ڪم ڪرڻ لاءِ ٺاهيو ويو آهي.

    • قطارون - گھڻن موضوعن واري ماحول لاءِ خاص قطارون (بلاڪنگ ۽ نان بلاڪنگ).

    • Synchronizers - اھي ھڪڙي گھڻائي واري ماحول ۾ ڪم ڪرڻ لاء خاص افاديت آھن.

    • عمل ڪندڙ - ٿريڊ پول ٺاهڻ لاءِ ميڪانيزم.

    • لاڪز - ٿريڊ هم وقت سازي ميڪانيزم جيڪي معياري کان وڌيڪ لچڪدار آهن (هم وقت سازي، انتظار ڪريو، اطلاع ڏيو، سڀني کي اطلاع ڏيو).

    • Atomics - ڪلاسز ملٽي ٿريڊنگ لاءِ بهتر ڪيل. انهن جو هر عمل ايٽمي آهي.

109. ٿريڊن جي وچ ۾ هم وقت سازي بابت ٻڌايو. انتظار()، اطلاع()، notifyAll()، ۽ join() طريقا ڪهڙا آهن؟

سلسلي جي وچ ۾ هم وقت سازي، هم وقت سازي ڪيل لفظ بابت آهي . هي ترميم ڪندڙ يا ته سڌو بلاڪ تي رکي سگهجي ٿو:
synchronized (Main.class) {
   // Some logic
}
يا سڌو طريقي سان دستخط ۾:
public synchronized void move() {
   // Some logic }
جيئن مون اڳ ۾ چيو آهي، هم وقت سازي هڪ ميکانيزم آهي بلاڪ/طريقي کي بند ڪرڻ لاءِ ٻين موضوعن تي هڪ ڀيرو هڪ ڌاڳو داخل ٿئي ٿو. اچو ته هڪ ڪمري جي طور تي ڪوڊ بلاڪ / طريقو سوچيو. ڪجھ ڌاڳو ڪمري جي ويجهو اچي ٿو، ان ۾ داخل ٿئي ٿو، ۽ ان جي چاٻي سان دروازو بند ڪري ٿو. جڏهن ٻيا سلسلا ڪمري جي ويجهو اچن ٿا، اهي ڏسن ٿا ته دروازو بند ٿيل آهي ۽ ويجهو انتظار ڪريو جيستائين ڪمرو دستياب ٿي وڃي. هڪ دفعو پهريون ڌاڳو ڪمري ۾ پنهنجي ڪاروبار سان ڪيو ويندو آهي، اهو دروازو کوليندو آهي، ڪمري کي ڇڏي ڏيندو آهي، ۽ چاٻي کي ڇڏيندو آهي. مون هڪ اهم جو ذڪر ڪيو آهي ٻه ڀيرا هڪ سبب لاءِ - ڇاڪاڻ ته ڪا شيءِ هڪجهڙائي واري واقعي موجود آهي. هي هڪ خاص اعتراض آهي جنهن ۾ مصروف/آزاد رياست آهي. جاوا ۾ هر شئي ۾ اهڙي شئي هوندي آهي، تنهنڪري جڏهن اسان هم وقت سازي ٿيل بلاڪ استعمال ڪندا آهيون، اسان کي ضرورت آهي ته قوس استعمال ڪرڻ لاءِ اهو اعتراض ظاهر ڪرڻ لاءِ جنهن جي ميوٽڪس کي بند ڪيو ويندو:
Cat cat = new Cat();
synchronized (cat) {
   // Some logic
}
اسان ڪلاس سان لاڳاپيل ميوٽڪس پڻ استعمال ڪري سگهون ٿا، جيئن مون پهرين مثال ۾ ڪيو ( Main.class ). آخرڪار، جڏهن اسان هڪ طريقي سان هم وقت سازي استعمال ڪندا آهيون ، اسان اهو بيان نه ڪندا آهيون ته اسان کي بند ڪرڻ چاهيون ٿا، صحيح؟ ھن حالت ۾، غير جامد طريقن لاء، ميوٽڪس جيڪو بند ڪيو ويندو اھو آھي اھو اعتراض، يعني ڪلاس جو موجوده اعتراض. جامد طريقن لاء، موجوده طبقي سان لاڳاپيل ميوٽڪس ( this.getClass(); ) بند ٿيل آهي. wait() هڪ طريقو آهي جيڪو ميوٽڪس کي آزاد ڪري ٿو ۽ موجوده ٿريڊ کي انتظار جي حالت ۾ رکي ٿو، ڄڻ ته موجوده مانيٽر سان ڳنڍيل هجي (ڪجهه اينڪر وانگر). انهي جي ڪري، اهو طريقو صرف هڪ هم وقت ساز بلاڪ يا طريقي سان سڏيو وڃي ٿو. ٻي صورت ۾، ان جو انتظار ڪيو ويندو ۽ ڇا جاري ڪيو ويندو؟). اهو پڻ نوٽ ڪريو ته هي هڪ طريقو آهي Object ڪلاس جو. خير، هڪ نه، پر ٽي:
  • wait() موجوده ٿريڊ کي انتظار واري حالت ۾ رکي ٿو جيستائين ٻيو ٿريڊ هن اعتراض تي notify() يا notifyAll() طريقو ڪال ڪري ٿو (اسان انهن طريقن بابت بعد ۾ ڳالهائينداسين).

  • wait(dong timeout) موجوده ٿريڊ کي انتظار واري حالت ۾ رکي جيستائين ٻيو ٿريڊ ڪال ڪري notify() or notifyAll() طريقو هن اعتراض تي يا وقت جو وقفو ختم ٿي وڃي.

  • انتظار (ڊگهو وقت ختم، int nanos) پوئين طريقي وانگر آهي، پر هتي نانوس توهان کي وضاحت ڪرڻ جي اجازت ڏئي ٿو nanoseconds (هڪ وڌيڪ صحيح وقت ختم).

  • notify() توهان کي جاڳائڻ جي اجازت ڏئي ٿي هڪ بي ترتيب واري سلسلي کي موجوده هم وقت سازي واري بلاڪ تي انتظار ڪري رهيو آهي. ٻيهر، اهو طريقو صرف هڪ هم وقت سازي بلاڪ يا طريقي سان سڏيو وڃي ٿو (آخر ۾، ٻين هنڌن تي ڪو به جاڳڻو نه هوندو).

  • notifyAll() موجوده مانيٽر تي انتظار ڪندڙ سڀني موضوعن کي جاڳائي ٿو (جنهن کي صرف هم وقت سازي ٿيل بلاڪ يا طريقي ۾ استعمال ڪيو ويندو آهي).

110. اسان هڪ سلسلي کي ڪيئن روڪيو؟

هتي چوڻ لاءِ پهرين شيءِ اها آهي ته جڏهن رن () مڪمل ٿيڻ تي هلندو آهي ، ٿريڊ پاڻمرادو ختم ٿي ويندو آهي. پر ڪڏهن ڪڏهن اسان شيڊول کان اڳ هڪ سلسلي کي مارڻ چاهيون ٿا، طريقو مڪمل ٿيڻ کان اڳ. پوءِ ڇا ڪريون؟ شايد اسان استعمال ڪري سگھون ٿا stop() طريقو Thread اعتراض تي ؟ نه! اھو طريقو ختم ٿيل آھي ۽ سسٽم جي حادثن جو سبب بڻجي سگھي ٿو. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 12 - 4خير، پوء ڇا؟ هن کي ڪرڻ جا ٻه طريقا آهن: پهريون ، استعمال ڪريو ان جي اندروني بلين پرچم. اچو ته هڪ مثال ڏسو. اسان وٽ ھڪڙو ٿريڊ جو عمل آھي جيڪو اسڪرين تي ھڪڙي خاص جملي کي ڊسپلي ڪرڻ گھرجي جيستائين ٿريڊ مڪمل طور تي بند نه ٿئي:
public class CustomThread extends Thread {
private boolean isActive;

   public CustomThread() {
       this.isActive = true;
   }

   @Override
   public void run() {
       {
           while (isActive) {
               System.out.println("The thread is executing some logic...");
           }
           System.out.println("The thread stopped!");
       }
   }

   public void stopRunningThread() {
       isActive = false;
   }
}
stopRunningThread() طريقي کي ڪال ڪرڻ اندروني پرچم کي غلط تي سيٽ ڪري ٿو، جنهن جي ڪري run() طريقو ختم ٿي ويو آهي. اچو ته ان کي بنيادي طور سڏيو :
System.out.println("Program starting...");
CustomThread thread = new CustomThread();
thread.start();
Thread.sleep(3);
// As long as our main thread is asleep, our CustomThread runs and prints its message on the console
thread.stopRunningThread();
System.out.println("Program stopping...");
نتيجي طور، اسان ڪنسول ۾ هن وانگر ڪجهه ڏسندا سين:
پروگرام شروع ٿي رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... پروگرام روڪي رهيو آهي... موضوع بند ٿي ويو!
ان جو مطلب اهو آهي ته اسان جو سلسلو شروع ٿيو، ڪنسول تي ڪيترائي پيغام ڇپيا، ۽ پوء ڪاميابيء سان بند ٿي ويا. نوٽ ڪريو ته ڏيکاريل پيغامن جو تعداد لانچ کان لانچ تائين مختلف ٿيندو. ۽ ڪڏهن ڪڏهن معاون ڌاڳو ڪجھ به نه ڏيکاري سگھي ٿو. مخصوص رويي جو دارومدار ان تي آهي ته مکيه موضوع ڪيتري وقت سمهي ٿو. جيتري دير سمهي ٿي، اوترو ئي گهٽ اهو آهي ته معاون ٿريڊ ڪجهه به ظاهر ڪرڻ جو انتظام نه ڪندو. 1 ايم ايس جي ننڊ جي وقت سان، توهان تقريبا ڪڏهن به پيغام نه ڏسندا. پر جيڪڏهن توهان ان کي 20 ms تي سيٽ ڪيو، ته پيغام تقريبن هميشه ڏيکاريا ويندا. جڏهن سمهڻ جو وقت ننڍو هوندو آهي، ته موضوع کي صرف پنهنجو ڪم شروع ڪرڻ ۽ ڪرڻ جو وقت نه هوندو آهي. ان جي بدران، اهو فوري طور تي روڪيو وڃي ٿو. ھڪڙو ٻيو طريقو استعمال ڪرڻ آھي interrupted() طريقو Thread اعتراض تي . اهو اندروني مداخلت واري پرچم جي قيمت واپس ڪري ٿو، جيڪو ڊفالٽ طور غلط آهي . يا ان جو مداخلت () طريقو، جيڪو ھن جھنڊو کي درست ڪري ٿو (جڏھن جھنڊو سچ آھي ، ڌاڳو ھلڻ بند ٿيڻ گھرجي). اچو ته هڪ مثال ڏسو:
public class CustomThread extends Thread {

   @Override
   public void run() {
       {
           while (!Thread.interrupted()) {
               System.out.println("The thread is executing some logic...");
           }
           System.out.println("The thread stopped!");
       }
   }
}
مکيه ۾ هلندڙ :
System.out.println("Program starting...");
Thread thread = new CustomThread();
thread.start();
Thread.sleep(3);
thread.interrupt();
System.out.println("Program stopping...");
ھن کي ھلائڻ جو نتيجو اھو ئي آھي جيئن پھرين صورت ۾، پر مون کي اھو طريقو بھتر پسند آھي: اسان گھٽ ڪوڊ لکيو ۽ وڌيڪ تيار ٿيل، معياري ڪارڪردگي استعمال ڪيو. خير، اهو اڄ لاء آهي!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION