থ্রেড বিঘ্নিত প্রক্রিয়াটি যা করছে তা বন্ধ করার জন্য একটি অনুরোধের প্রতিক্রিয়া জানাতে (সহযোগিতা) থ্রেড পাওয়ার পছন্দের উপায়। যে কোনও থ্রেড (থ্রেড নিজেই আমি মনে করি) কল করতে পারেinterrupt()
একটি থ্রেডে ।
অনুশীলনে, সাধারণ ব্যবহারের ক্ষেত্রে interrupt()
কোনও ধরণের ফ্রেমওয়ার্ক বা ম্যানেজার জড়িত থাকে যা কিছু কর্মী থ্রেডকে তারা যা করছে তা বন্ধ করার জন্য বলে। যদি কর্মী থ্রেডটি "বিঘ্নিত সচেতন" হয় তবে এটি লক্ষ্য করবে যে এটি কোনও ব্যতিক্রমের মাধ্যমে বা পর্যায়ক্রমে এর বাধিত পতাকাটি পরীক্ষা করে বাধাগ্রস্ত হয়েছে। এটি ব্যাহত হয়েছে তা লক্ষ্য করে, একটি ভাল আচরণযুক্ত থ্রেড এটি যা করছে তা ত্যাগ করবে এবং নিজেই শেষ হবে end
উপরের ব্যবহারের ক্ষেত্রে ধরে নিলে, আপনার কোডটি জাভা ফ্রেমওয়ার্কের মধ্যে বা কোনও শ্রমিকের থ্রেড থেকে চালিত হলে বাধাগ্রস্ত হতে পারে। এবং যখন এটি বাধাগ্রস্ত হয়, তখন আপনার কোডটি যা করছে তা ছেড়ে দেওয়া উচিত এবং নিজেকে সবচেয়ে উপযুক্ত উপায়ে শেষ করতে হবে। আপনার কোডটি কীভাবে ডাকা হয়েছিল তার উপর নির্ভর করে এটি ফিরে আসার দ্বারা বা কিছু উপযুক্ত ব্যতিক্রম ছুঁড়ে দিয়ে করা যেতে পারে। তবে এটি সম্ভবত কল করা উচিত নয়System.exit()
। (আপনার অ্যাপ্লিকেশনটি কেন এটি ব্যহত হয়েছিল তা অগত্যা জানে না এবং কাঠামোর দ্বারা বাধা দেওয়ার দরকার আছে এমন আরও কিছু থ্রেড রয়েছে কিনা তা অবশ্যই জানে না))
অন্যদিকে, যদি আপনার কোডটি কিছু কাঠামোর নিয়ন্ত্রণে চালিত করার জন্য ডিজাইন করা না হয়, আপনি যুক্তি দিতে পারেন যে এটি InterruptedException
একটি অপ্রত্যাশিত ব্যতিক্রম; অর্থাত্ একটি বাগ। সেক্ষেত্রে আপনাকে অন্যান্য বাগের মতো ব্যতিক্রমটিও আচরণ করা উচিত; উদাহরণস্বরূপ, এটি একটি চেক না করা ব্যতিক্রমগুলিতে মুড়ে রাখুন, এবং অন্যান্য অপ্রত্যাশিত চেক করা ব্যতিক্রমগুলির সাথে মোকাবিলা করুন এবং একই পয়েন্টে এটি লগ করুন। (বিকল্পভাবে, আপনার অ্যাপ্লিকেশনটি কেবল বাধা উপেক্ষা করতে পারে এবং এটি যা করছে তা চালিয়ে যেতে পারে))
1) আমি যদি কখনও নিজেই অন্য থ্রেডগুলিতে বাধা পাই না, তবে কোনও বাধাপ্রাপ্তি কী ঘটতে পারে?
একটা উদাহরণ যদি আপনার হয় Runnable
বস্তু একটি ব্যবহার মৃত্যুদন্ড কার্যকর করা হয় ExecutorService
এবং shutdownNow()
সেবা বলা হয়। এবং তত্ত্ব অনুসারে, কোনও তৃতীয় পক্ষের থ্রেড পুল বা থ্রেড পরিচালনার কাঠামো বৈধভাবে এই জাতীয় কিছু করতে পারে।
2) যদি আমি কখনও কখনও নিজেই বাধা () ব্যবহার করে অন্য থ্রেডগুলিতে বাধা দিই না ... InterruptedException
তবে এর অর্থ কী? একজনকে ধরার পরে আমার কী করা উচিত? আমার অ্যাপ বন্ধ?
interrupt()
কলগুলি কী করছে এবং কেন করছে তা নির্ধারণ করার জন্য আপনার কোডবেস বিশ্লেষণ করতে হবে । একবার আপনি এটি বের করে নিলে, আপনি << অ্যাপ্লিকেশনের << অংশে কী করতে হবে তা আপনি কাজ করতে পারেন।
যতক্ষণ না আপনি জানেন যে কেন InterruptedException
ছুড়ে দেওয়া হচ্ছে, আমি এটিকে একটি কঠিন ত্রুটি হিসাবে বিবেচনা করার পরামর্শ দেব; উদাহরণস্বরূপ লগ ফাইলটিতে স্ট্যাকট্রেস প্রিন্ট করুন এবং অ্যাপটি বন্ধ করুন। (স্পষ্টতই, এটি সর্বদা সঠিক উত্তর নয় ... তবে মূল বিষয়টি হ'ল এটি "বাগ" এবং এটি বিকাশকারী / রক্ষণাবেক্ষণকারীদের নজরে আনতে হবে))
3) আমি কীভাবে জানতে পারি কে / কী কল করছে interrupt()
?
এর উত্তম উত্তর নেই। আমি সবচেয়ে ভাল পরামর্শ দিতে পারি হ'ল একটি ব্রেকপয়েন্ট সেট Thread.interrupt()
করা এবং কল স্ট্যাকের দিকে তাকাতে।