JavaRush /جاوا بلاگ /Random-SD /جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو. حصو ...

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

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

103. وراثت ۾ استثناءَ جي جانچ ڪرڻ جا قاعدا ڪهڙا آهن؟

جيڪڏهن آئون سوال کي صحيح سمجهان ٿو، اهي وراثت دوران استثناء سان ڪم ڪرڻ جي ضابطن بابت پڇي رهيا آهن، ۽ اهي هن ريت آهن:
  • نزول/تطبيق ۾ هڪ مٿانهون يا لاڳو ٿيل طريقو چيڪ ٿيل استثنا نه ٿو اڇلائي سگھي ٿو جيڪي سپر ڪلاس/انٽرفيس ميٿڊ ۾ استثنان کان اعليٰ درجي ۾ آهن.
اهو آهي، جيڪڏهن اسان وٽ آهي هڪ مخصوص جانورن جو انٽرفيس هڪ طريقي سان جيڪو اڇلائي ٿو IOException :
public  interface Animal {
   void voice() throws IOException;
}
هن انٽرفيس جي عمل ۾، اسان وڌيڪ عام اڇلائي استثنا (مثال طور، Exception ، Throwable ) اڇلائي نٿا سگهون، پر اسين ان کي نسلي استثنا سان تبديل ڪري سگهون ٿا، جهڙوڪ FileNotFoundException :
public class Cat implements Animal {
   @Override
   public void voice() throws FileNotFoundException {
// некоторая реализация
   }
}
  • ذيلي ڪلاس تعمير ڪندڙ کي لازمي طور تي ان جي اڇلائي بلاڪ ۾ شامل ڪرڻ گھرجي سپر ڪلاس ڪنسٽرڪٽر پاران اڇلايل سڀ استثنا ڪلاس جيڪي اعتراض ٺاھڻ وقت سڏيا ويندا آھن.
فرض ڪريو جانورن جي طبقي جي تعمير ڪندڙ ڪيترائي استثنا اُڇليا آهن:
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("Данное сообщение не будет выведенно в консоль");
}
ڪجھ ٻيون حالتون پڻ آھن جن ۾ آخرڪار ڪم نه ڪندا:
  • نازڪ سسٽم جي مسئلن جي ڪري پروگرام جي غير معمولي ختم ٿيڻ، يا ڪجهه غلطي جو زوال جيڪو ايپليڪيشن کي "ڪرش" ڪري ڇڏيندو (هڪ غلطي جو مثال ساڳيو StackOwerflowError ٿي سگهي ٿو جيڪو ٿئي ٿو جڏهن اسٽيڪ ميموري اوور فلو ٿئي ٿي).
  • جڏهن ڊيمون ٿريڊ رائي مان گذري ٿو ... آخرڪار بلاڪ ۽ ان سان گڏ پروگرام ختم ٿي وڃي ٿو. آخرڪار، ڊيمون موضوع پس منظر جي عملن لاء هڪ موضوع آهي، اهو آهي، اهو هڪ ترجيح ۽ لازمي ناهي، ۽ ايپليڪيشن ان جي ڪم کي ختم ڪرڻ جو انتظار نه ڪندو.
  • سڀ کان عام لامحدود لوپ، ڪوشش يا پڪڙڻ ۾ ، هڪ ڀيرو جنهن ۾ وهڪري هميشه لاءِ اتي رهندي:

    try {
       while (true) {
       }
    } finally {
       System.out.println("Данное сообщение не будет выведенно в консоль");
    }

اهو سوال نئين سکندڙن لاءِ انٽرويو ۾ تمام گهڻو مشهور آهي، تنهنڪري انهن مان ڪجهه غير معمولي حالتون ياد رکڻ جي قابل آهن. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 12 - 3

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

1) شايد سوال غلط پڇيو ويو. جيتري قدر مان سمجهان ٿو، هن سوال جو مطلب آهيهڪ ڪوشش بلاڪ لاءِ ڪيترائي ڪيچ :
try {
  throw new FileNotFoundException();
} catch (FileNotFoundException e) {
   System.out.print("Упс, у вас упало исключение - " + e);
} catch (IOException e) {
   System.out.print("Упс, у вас упало исключение - " + e);
} catch (Exception e) {
   System.out.print("Упс, у вас упало исключение - " + e);
}
جيڪڏهن ڪو استثنا ڪنهن ڪوشش واري بلاڪ ۾ ٿئي ٿو ، ته پوءِ ڪيچ بلاڪ متبادل طور تي ان کي مٿي کان هيٺ تائين پڪڙڻ جي ڪوشش ڪندا آهن، جيڪڏهن ڪو خاص ڪيچ بلاڪ ڪامياب ٿئي ٿو، ته اهو استثنا کي سنڀالڻ جو حق حاصل ڪري ٿو، جڏهن ته هيٺيان بلاڪ باقي نه هوندا. ان کي پڪڙڻ جي ڪوشش ڪرڻ ۽ ان کي پنهنجي طريقي سان عمل ڪرڻ جي قابل. تنهن ڪري، تنگ استثنا کي ڪيچ بلاڪ زنجير ۾ مٿاهون رکيو ويو آهي ، ۽ وسيع استثنا هيٺ رکيا ويا آهن. مثال طور، جيڪڏهن اسان جي پهرين ڪيچ بلاڪ ۾ Exception class جي هڪ استثنا کي پڪڙيو ويو آهي ، ته پوءِ چيڪ ٿيل استثنا باقي بلاڪن ۾ داخل نه ٿي سگهندا (باقي بلاڪ استثنا اولاد سان بلڪل بيڪار هوندا). 2) سوال صحيح پڇيو ويو، ان صورت ۾، اسان جي پروسيسنگ هيٺ ڏنل نظر ايندي:
try {
  throw new NullPointerException();
} catch (Exception e) {
   if (e instanceof FileNotFoundException) {
       // некоторая обработка с сужением типа (FileNotFoundException)e
   } else if (e instanceof ArithmeticException) {
       // некоторая обработка с сужением типа (ArithmeticException)e
   } else if(e instanceof NullPointerException) {
       // некоторая обработка с сужением типа (NullPointerException)e
   }
ڪيچ ذريعي استثنا حاصل ڪرڻ کان پوءِ ، اسان مثال جي طريقي سان ان جي مخصوص قسم کي ڳولڻ جي ڪوشش ڪندا آهيون ، جيڪو اهو جانچڻ لاءِ استعمال ڪيو ويندو آهي ته ڇا ڪا شئي ڪنهن خاص قسم سان تعلق رکي ٿي، ته جيئن بعد ۾ اسان ان کي ان قسم تائين محدود ڪري سگهون، بغير ڪنهن منفي نتيجن جي. ٻئي غور ڪيل طريقا ساڳي صورتحال ۾ استعمال ڪري سگهجن ٿا، پر مون چيو ته سوال غلط آهي ڇو ته مان ٻئي آپشن کي سٺو نه ٿو چوان ۽ ان کي منهنجي عملي طور تي ڪڏهن به نه ڏٺو آهي، جڏهن ته ساڳئي وقت ملٽي ڪيچز سان گڏ پهريون طريقو وڏي پئماني تي حاصل ڪيو آهي. ڌيان ڏيڻ. پکيڙڻ. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 12 - 4

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

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

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

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

ملٽي ٽريڊنگ

جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 12 - 5

108. ملٽي ٿريڊنگ سان ڪم ڪرڻ لاءِ توهان ڪهڙا اوزار ڄاڻو ٿا؟

جاوا ۾ Multithreading استعمال ڪرڻ لاءِ بنيادي/بنيادي اوزار:
  • هم وقت سازي (Synchronized) هڪ ميکانيزم آهي بند ڪرڻ (بلاڪ ڪرڻ) جو طريقو/بلاڪ جڏهن هڪ ٿريڊ ان ۾ داخل ٿئي ٿي، ٻين ٿريڊن مان.
  • وولٽائل هڪ ميکانيزم آهي جنهن کي يقيني بڻائڻ لاءِ هڪ متغير تائين مسلسل پهچ مختلف موضوعن ذريعي، يعني هڪ متغير تي هن موڊيفائر جي موجودگيءَ سان، سڀني تفويض ۽ پڙهڻ جا عمل ايٽمي هجڻ گهرجن. ٻين لفظن ۾، موضوع هن متغير کي پنهنجي مقامي ياداشت ۾ نقل نه ڪندا ۽ ان کي تبديل ڪندا، پر ان جي اصلي قيمت کي تبديل ڪندا.
هتي volatile بابت وڌيڪ پڙهو .
  • Runnable هڪ انٽرفيس آهي جنهن کي لاڳو ڪري سگهجي ٿو (خاص طور تي، ان جي هلائڻ جو طريقو) هڪ خاص طبقي ۾:
public class CustomRunnable implements Runnable {
   @Override
   public void run() {
       // некоторая логика
   }
}
۽ ھن ڪلاس جو ھڪڙو اعتراض ٺاھيو، توھان نئين ٿريڊ اعتراض جي ٺاھيندڙ ۾ ھن اعتراض کي سيٽ ڪندي ۽ ان کي start() طريقي سان سڏي سگھو ٿا :
Runnable runnable = new CustomRunnable();
new Thread(runnable).start();
شروع جو طريقو لاڳو ٿيل run() طريقي کي الڳ سلسلي ۾ هلائي ٿو.
  • ٿريڊ هڪ طبقو آهي، جنهن مان ورثي ۾ ملي ٿو (جڏهن ته رن جي طريقي کي ختم ڪندي ):
public class CustomThread extends Thread {
   @Override
   public void run() {
       // некоторая логика
   }
}
۽ هن ڪلاس جو هڪ اعتراض ٺاهي ۽ ان کي استعمال ڪندي شروع ڪندي start() طريقو ، اسان ان سان هڪ نئون ٿريڊ شروع ڪنداسين:
new CustomThread().start();
  • Concurrency هڪ پئڪيج آهي اوزارن سان گڏ ڪم ڪرڻ لاءِ گھڻن موضوعن واري ماحول ۾.
اهو مشتمل آهي:
  • سمورو مجموعو - مجموعن جو هڪ سيٽ هڪ گھڻن موضوعن واري ماحول ۾ ڪم ڪرڻ لاءِ خاص.
  • قطارون - گھڻن موضوعن واري ماحول لاءِ خاص قطارون (بلاڪنگ ۽ نان بلاڪنگ).
  • Synchronisers گھڻن موضوعن واري ماحول ۾ ڪم ڪرڻ لاءِ خاص افاديتون آھن.
  • Executors ٿريڊ پول ٺاهڻ لاءِ ميکانيزم آهن.
  • لاڪ - ٿريڊ هم وقت سازي ميڪانيزم (معياري وارن کان وڌيڪ لچڪدار - هم وقت سازي، انتظار ڪريو، اطلاع ڏيو، سڀني کي اطلاع ڏيو).
  • ائٽمڪس ڪلاس آھن جيڪي ملٽي ٿريڊ ايگزيڪيوشن لاءِ بهتر ڪيل آھن؛ ھر آپريشن ايٽمي آھي.
سمورو پيڪيج بابت وڌيڪ پڙهو هتي .

109. موضوعن جي وچ ۾ هم وقت سازي بابت ڳالهايو. انتظار()، notify() - notifyAll() join() طريقا ڇا لاءِ استعمال ڪيا ويا آهن؟

جيتري قدر مان سوال کي سمجھان ٿو، موضوعن جي وچ ۾ هم وقت سازي اهم موڊيفائر جي باري ۾ آهي - synchronized . هي ترميم ڪندڙ رکي سگھجي ٿو يا سڌو سنئون بلاڪ جي اڳيان:
synchronized (Main.class) {
   // некоторая логика
}
يا سڌو طريقي سان دستخط ۾:
public synchronized void move() {
   // некоторая логика}
جيئن مون اڳ ۾ چيو، هم وقت سازي هڪ ميکانيزم آهي جيڪو توهان کي اجازت ڏئي ٿو بلاڪ/طريقي کي بند ڪرڻ جي ٻين موضوعن مان جڏهن هڪ موضوع اڳ ۾ ئي داخل ٿي چڪو آهي. ھڪڙي ڪمري جي طور تي ھڪڙي بلاڪ / طريقو سوچيو. ڪي وهڪرو، ان وٽ اچڻ کان پوءِ ان ۾ داخل ٿيندا ۽ ان کي بند ڪري ڇڏيندا، ٻيا وهڪرا، ڪمري ۾ اچڻ ۽ بند ٿيل ڏسي، ان جي ويجهو انتظار ڪندا جيستائين اهو آزاد نه ٿئي. پنهنجو ڪاروبار ڪرڻ بعد، پهريون ڌاڳو ڪمري مان نڪري ٿو ۽ ڪنجي کي ڇڏي ٿو. ۽ اهو ڪجھ به نه هو ته مون مسلسل اهم بابت ڳالهايو، ڇاڪاڻ ته اهو واقعي موجود آهي. هي هڪ خاص اعتراض آهي جنهن ۾ مصروف/آزاد رياست آهي. هي اعتراض هر جاوا اعتراض سان ڳنڍيل آهي، تنهنڪري جڏهن هڪ هم وقت سازي بلاڪ استعمال ڪندي اسان کي قوس ۾ ظاهر ڪرڻ جي ضرورت آهي اعتراض جنهن جي ميوٽڪس تي اسان دروازو بند ڪرڻ چاهيون ٿا:
Cat cat = new Cat();
synchronized (cat) {
   // некоторая логика
}
توھان پڻ استعمال ڪري سگھو ٿا ڪلاس ميوٽڪس، جيئن مون پھريون مثال ۾ ڪيو ھو ( Main.class ). جڏهن اسان هڪ طريقي سان هم وقت سازي استعمال ڪندا آهيون ، اسان اهو اعتراض نه بيان ڪندا آهيون جنهن تي اسان بند ڪرڻ چاهيون ٿا، صحيح؟ هن حالت ۾، هڪ غير جامد طريقو لاء، اهو بند ڪيو ويندو هن اعتراض جي ميوٽڪس تي ، اهو آهي، هن طبقي جو موجوده اعتراض. جامد هڪ موجوده طبقي جي ميوٽڪس تي بند ٿي ويندو ( this.getClass()؛ ). توهان هتي mutex بابت وڌيڪ پڙهي سگهو ٿا . خير، هتي هم وقت سازي بابت پڙهو . Wait() ھڪڙو طريقو آھي جيڪو ميوٽڪس کي جاري ڪري ٿو ۽ موجوده ٿريڊ کي اسٽينڊ بائي موڊ ۾ رکي ٿو، ڄڻ ته موجوده مانيٽر سان ڳنڍيل آھي (ڪجهه لنگر وانگر). انهي جي ڪري، اهو طريقو صرف هڪ هم وقت سازي بلاڪ يا طريقي سان سڏيو وڃي ٿو (ٻي صورت ۾، ان کي ڇا آزاد ڪرڻ گهرجي ۽ ان کي ڪهڙي اميد رکڻ گهرجي). اهو پڻ نوٽ ڪريو ته هي هڪ طريقو آهي Object class . وڌيڪ واضح طور تي، هڪ نه، پر ٽي به:
  • Wait() - موجوده ٿريڊ کي انتظار جي موڊ ۾ رکي جيستائين ٻيو ٿريڊ هن اعتراض لاءِ notify() يا notifyAll() طريقو ڪال نه ڪري (اسان انهن طريقن بابت بعد ۾ ڳالهائينداسين).

  • انتظار ڪريو (ڊگهو وقت ختم) - موجوده ٿريڊ کي انتظار جي موڊ ۾ رکي ٿو جيستائين ٻيو ٿريڊ ڪال ڪري notify() يا notifyAll() طريقو هن اعتراض تي يا مخصوص وقت ختم ٿي وڃي .

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

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

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

110. وهڪري کي ڪيئن روڪيو؟

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

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

   @Override
   public void run() {
       {
           while (isActive) {
               System.out.println("Поток выполняет некую логику...");
           }
           System.out.println("Поток остановлен!");
       }
   }

   public void stopRunningThread() {
       isActive = false;
   }
}
جڏهن استعمال ڪندي stopRunning() طريقو ، اندروني پرچم غلط ٿي ويندو آهي ۽ رن جو طريقو بند ٿي ويندو آهي. اچو ته ان کي بنيادي طور تي هلون :
System.out.println("Начало выполнения программы");
CustomThread thread = new CustomThread();
thread.start();
Thread.sleep(3);
// пока наш основной поток спит, вспомогательный  CustomThread работает и выводит в коноль своё сообщение
thread.stopRunningThread();
System.out.println("Конец выполнения программы");
نتيجي طور، اسان ڪنسول ۾ هن وانگر ڪجهه ڏسندا سين:
پروگرام جي ايگزيڪيوشن جي شروعات ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... The ٿريڊ ڪجهه منطق تي عمل ڪري رهيو آهي... پروگرام جي عمل جي پڄاڻي ٿريڊ کي روڪيو ويو آهي!
هن جو مطلب اهو آهي ته اسان جو سلسلو ڪم ڪيو، ڪنسول ڏانهن پيغامن جو هڪ خاص تعداد ڪڍيو ۽ ڪاميابي سان روڪيو ويو. مان نوٽ ڪريان ٿو ته پيغامن جي پيداوار جو تعداد رن کان رن تائين مختلف ٿيندو؛ ڪڏهن ڪڏهن اضافي ٿريڊ ڪجھ به نه نڪرندو هو. جيئن مون ڏٺو آهي، اهو منحصر آهي ننڊ جي وقت تي مکيه موضوع، اهو ڊگهو آهي، گهٽ موقعو آهي ته اضافي موضوع ڪجهه به نه نڪرندو. 1ms جي ننڊ جي وقت سان، پيغام تقريبن ڪڏهن به نه نڪرندا آهن، پر جيڪڏهن توهان ان کي 20ms تي سيٽ ڪيو، اهو تقريبا هميشه ڪم ڪري ٿو. ٿي سگهي ٿو، جڏهن وقت گهٽ هجي، ته ان سلسلي کي صرف پنهنجو ڪم شروع ڪرڻ ۽ شروع ڪرڻ جو وقت نه هوندو آهي، ۽ فوري طور تي بند ڪيو ويندو آهي. ٻيو طريقو استعمال ڪرڻ آهي interrupted() طريقو Thread اعتراض تي، جيڪو واپس ڪري ٿو اندروني مداخلت واري پرچم جي قيمت (هي پرچم ڊفالٽ طور غلط آهي ) ۽ ان جو ٻيو مداخلت () طريقو ، جيڪو هن پرچم کي درست ڪري ٿو (جڏهن اهو جھنڊو سچ آھي ان سلسلي کي پنھنجو ڪم بند ڪرڻ گھرجي). اچو ته هڪ مثال ڏسو:
public class CustomThread extends Thread {

   @Override
   public void run() {
       {
           while (!Thread.interrupted()) {
               System.out.println("Поток выполняет некую логику...");
           }
           System.out.println("Поток остановлен!");
       }
   }
}
مکيه ۾ هلائڻ :
System.out.println("Начало выполнения программы");
Thread thread = new CustomThread();
thread.start();
Thread.sleep(3);
thread.interrupt();
System.out.println("Конец выполнения программы");
عملدرآمد جو نتيجو ساڳيو ٿيندو جيئن پهرين صورت ۾، پر مون کي اهو طريقو بهتر پسند آهي: اسان گهٽ ڪوڊ لکندا آهيون ۽ وڌيڪ تيار ڪيل، معياري ڪارڪردگي استعمال ڪندا آهيون. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 12 - 7اهو آهي جتي اسان اڄ بند ڪنداسين.جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 12 - 8
سيريز ۾ ٻيا مواد:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION