"হ্যালো, অ্যামিগো! আপনাকে স্বীকার করতে হবে যে এলির বাতিল ধারণাটি দুর্দান্ত ছিল।"
"হ্যাঁ।"
"আসলে, থ্রেড ক্লাসে অনুরূপ কিছু বিদ্যমান । শুধুমাত্র ভেরিয়েবলটিকে isCancel বলা হয় না । একে isInterrupt বলা হয় । এবং থ্রেড বন্ধ করার জন্য যে পদ্ধতি ব্যবহার করা হয় তা cancel() নয় । এটি interrupt() ।"
"সত্যি?"
"হ্যাঁ। এটি পরীক্ষা করে দেখুন:"
কোড | বর্ণনা |
---|---|
|
যেহেতু একাধিক থ্রেড একই ক্লক অবজেক্টে রান মেথড কল করতে পারে, আমরা বর্তমান থ্রেডের জন্য থ্রেড অবজেক্ট পাই ।
বর্তমান থ্রেডের isInterrupt ভেরিয়েবল মিথ্যা না হওয়া পর্যন্ত Clock ক্লাস কনসোলে সেকেন্ডে একবার "টিক" শব্দটি লিখে। যখন isInterrupt সত্য হয়ে যায় , রান পদ্ধতিটি বন্ধ হয়ে যায়। |
|
প্রধান থ্রেড একটি শিশু থ্রেড (ঘড়ি) শুরু করে যা চিরতরে চালানো উচিত।
10 সেকেন্ড অপেক্ষা করুন এবং বিঘ্নিত পদ্ধতিতে কল করে কাজটি বাতিল করুন । মূল থ্রেড তার কাজ সম্পন্ন করে। ঘড়ির কাঁটা তার কাজ শেষ করে। |
তদুপরি, ঘুমের পদ্ধতি, যা মানুষ রান পদ্ধতিতে অন্তহীন লুপে ব্যবহার করতে পছন্দ করে , স্বয়ংক্রিয়ভাবে isInterrupt পরিবর্তনশীল পরীক্ষা করে। যদি একটি থ্রেড ঘুমের পদ্ধতিকে কল করে, তবে পদ্ধতিটি প্রথমে পরীক্ষা করে যে সেই থ্রেডের জন্য ইন্টারাপ্ট সত্য কিনা। যদি এটি সত্য হয়, পদ্ধতিটি ঘুমাবে না। পরিবর্তে, এটি একটি InterruptedException ব্যতিক্রম নিক্ষেপ করে।
"কেন একটি ব্যতিক্রম নিক্ষেপ? একটি লুপে isCancel() এর পরিবর্তে isInterrupted() বসানো কি ভাল হবে না?"
" প্রথম , রান পদ্ধতিতে সবসময় লুপ থাকে না। পদ্ধতিতে অন্য পদ্ধতিতে কয়েক ডজন কল থাকতে পারে। তারপর আপনাকে প্রতিটি মেথড কলের আগে একটি isInterrupted চেক যোগ করতে হবে।"
" দ্বিতীয় , কিছু পদ্ধতি যা অনেকগুলি বিভিন্ন ক্রিয়াকে জড়িত করে তা কার্যকর করতে খুব দীর্ঘ সময় লাগতে পারে।"
" তৃতীয় , একটি ব্যতিক্রম নিক্ষেপ করা isInterrupted চেককে প্রতিস্থাপন করে না। এটি শুধুমাত্র একটি সুবিধাজনক সংযোজন। নিক্ষিপ্ত ব্যতিক্রমটি আপনাকে দ্রুত কল স্ট্যাকটিকে রান পদ্ধতিতে ফিরিয়ে আনতে দেয় । "
" চতুর্থ , ঘুমের পদ্ধতিটি প্রচুর ব্যবহার করা হয়। দেখা যাচ্ছে, এই সহায়ক পদ্ধতিটি একটি অন্তর্নিহিত চেক দ্বারা উন্নত করা হয়েছে যা কম সহায়ক নয়। মনে হচ্ছে কেউ বিশেষভাবে চেকটি যোগ করেনি, কিন্তু এটি আছে। এটি অত্যন্ত মূল্যবান যখন আপনি অন্য কারো কোড ব্যবহার করছেন এবং আপনি নিজেই চেক যোগ করতে পারবেন না।"
" পঞ্চম , অতিরিক্ত চেক কর্মক্ষমতা হ্রাস করে না। ঘুমের পদ্ধতিকে কল করার অর্থ হল থ্রেডটি কিছু করা উচিত নয় (ঘুমানো ছাড়া), তাই অতিরিক্ত কাজ কাউকে বিরক্ত করে না।"
"এগুলি গুরুতর যুক্তি।"
"এবং, পরিশেষে , এটি রয়েছে: আপনার চালানোর পদ্ধতিটি অন্য কারো কোডকে কল করতে পারে—কোড যা আপনার অ্যাক্সেস নেই (সোর্স কোড এবং/অথবা কোডটি পরিবর্তন করার অধিকার)। এতে হয়ত বাধাপ্রাপ্ত চেক নাও থাকতে পারে এবং এটি ব্যবহার করতে পারে " চেষ্টা করুন ... ধরা (ব্যতিক্রম ই) " সব ব্যতিক্রম ধরার জন্য।"
কেউ গ্যারান্টি দিতে পারে না যে একটি থ্রেড বন্ধ করা হবে। শুধুমাত্র একটি থ্রেড নিজেকে থামাতে পারে.
GO TO FULL VERSION