থ্রেড লাইফ সাইকেল এবং থ্রেড স্টেটস- ১

"হাই, অ্যামিগো!"

"আমরা একটি নতুন বিষয় শুরু করতে যাচ্ছি: থ্রেড।"

"আসুন শুরু করা যাক। আজ আমরা সেই অবস্থাগুলি পরীক্ষা করব যেগুলি একটি থ্রেড অবজেক্টের মধ্য দিয়ে যায় (বা হতে পারে) যখন একটি থ্রেড চলছে।"

"আপনি এই মুহূর্তে কয়টি রাজ্যের নাম বলতে পারেন, অ্যামিগো?"

"দুই। প্রথমটি হল start() মেথড কল করার আগে একটি থ্রেড: অবজেক্টটি বিদ্যমান, কিন্তু থ্রেডটি এখনও সক্রিয় নয়। এবং দ্বিতীয়টি হল start() মেথড কল করার পর: যখন থ্রেড কিছু করছে গুরুত্বপূর্ণ।"

"আপনি ঠিক বলেছেন-এরকম একটি পার্থক্য আছে। এই রাজ্যগুলিকে বলা হয় নতুন এবং চলমান , কিন্তু এটি কেবল শুরু।"

"প্রথম, কিছু সময়ে থ্রেডটি চালানো শেষ হবে, যার মানে এমন একটি পরিস্থিতি হতে পারে যেখানে থ্রেড বস্তুটি বিদ্যমান, কিন্তু থ্রেডটি নতুন বা চলমান অবস্থায় নেই।" এই অবস্থা, যেখানে থ্রেডটি চালানো শেষ হয়েছে, তাকে বলা হয় সমাপ্ত ।"

"কিন্তু আরও অনেক কিছু আছে। ভুলে যাবেন না যে যেকোন সময়ে শুধুমাত্র একটি থ্রেড আসলে চলছে। যা একই সাথে কাজ বলে মনে হচ্ছে তা হল প্রসেসর ক্রমাগত থ্রেড থেকে থ্রেডে লাফিয়ে চলেছে। যখন থ্রেডটি মনে হয় তার জন্য একটি পৃথক অবস্থা রয়েছে। দৌড়াচ্ছে, কিন্তু আসলে তার পালার জন্য অপেক্ষা করছে: একে রেডি-টু-রান বলা হয় একটি থ্রেড কাজ করে, এটি ক্রমাগত রান থেকে রেডিতে স্যুইচ করে , এবং তারপর আবার সক্রিয় হয়ে গেলে দৌড়াতে ফিরে যায়।"

" স্টার্ট () মেথড কল করার পরপরই , থ্রেডটিকে রেডি-টু-রান স্ট্যাটাস বরাদ্দ করা হয় এবং JVM যে থ্রেডগুলির মধ্যে স্যুইচ করে সেগুলির একটি শেয়ার করা তালিকায় রাখা হয়।"

"এটি খুব কঠিন নয়। এটি চালানো শুরু করার আগে, এটির নতুন অবস্থা আছে। এটি শেষ হওয়ার পরে, এটি বন্ধ হয়ে যায় । যখন এটি চলছে, থ্রেডটি চলমান অবস্থায় আছে; তারপর যখন এটি অপেক্ষা করছে, এটি প্রস্তুত অবস্থায় রয়েছে "

"আপনার সংক্ষিপ্ততা আশ্চর্যজনক, কিন্তু আপনি সঠিক।"

"কিন্তু আরও আছে। থ্রেডটি ব্লক করা যেতে পারে। উদাহরণস্বরূপ, যখন আপনি একটি সিঙ্ক্রোনাইজড ব্লকে প্রবেশ করেন। যদি একটি থ্রেড সিঙ্ক্রোনাইজড হিসাবে চিহ্নিত একটি কোড ব্লকে যায় এবং অন্য একটি থ্রেড এটি ব্যবহার করে, তাহলে আমাদের থ্রেডটি অবরুদ্ধ অবস্থায় প্রবেশ করবে এবং অপেক্ষা করবে বস্তুর মিউটেক্স (লক) মুক্তির জন্য।"

"রাজ্যগুলির সাথে এই পরিস্থিতিটি কেমন দেখায় তা এখানে:"

থ্রেড লাইফ সাইকেল এবং থ্রেড স্টেটস - 2

"কিন্তু আরও কিছু আছে। অপেক্ষা নামক একটি পৃথক অবস্থাও আছে । এটি তখন হয় যখন একটি থ্রেড ব্লক করা হয় না , তবে প্রস্তুতও হয় না । উদাহরণস্বরূপ, যখন আপনি অন্য থ্রেডে join () পদ্ধতিতে কল করেন।"

আমরা যখন অন্য থ্রেড অবজেক্টে join() কল করি, তখন মনে হয় যেন আমাদের থ্রেড এটিকে «যোগদান করে», কিন্তু বাস্তবে এটি অন্য থ্রেড শেষ হওয়ার জন্য অপেক্ষা করে।

"অতিরিক্ত, অপেক্ষা () পদ্ধতিও রয়েছে (প্রতীক্ষা/বিজ্ঞপ্তি/নোটিফাই সমস্ত পদ্ধতির ত্রয়ী থেকে), যা একটি থ্রেডকে অপেক্ষা করার অবস্থায় পরিবর্তন করে যখন এটি কল করা হয়।"

"হুও।"

"এক মিনিট অপেক্ষা করুন! এখনও আরও অনেক কিছু আছে। একটি থ্রেড ঘুমের পদ্ধতিতে কল করে ঘুমাতে পারে, উদাহরণস্বরূপ। এর জন্য একটি পৃথক অবস্থাও রয়েছে। এটিকে বলা হয় « টাইমড ওয়েটিং »। « টাইমড ওয়েটিং » মানে থ্রেডটি কিছুর জন্য অপেক্ষা করছে একটি সীমিত সময়৷ আপনি যদি একটি প্যারামিটার সহ একটি অপেক্ষার পদ্ধতিকে কল করেন, যেমন wait(timeout) বা join(timeout), তাহলে থ্রেডটি সময়-প্রতীক্ষার অবস্থায় প্রবেশ করবে।"

"এখানে সম্পূর্ণ ডায়াগ্রাম:"

থ্রেড লাইফ সাইকেল এবং থ্রেড স্টেটস - 3

"হুম। এটাই কি সব? নাকি আরও 10টি আকর্ষণীয় রাজ্য আছে?"

"আপাতত, এটাই।"

"অভ্যাসে, আপনি কেবল প্রথম চিত্রটি মনে রাখতে পারেন। এটি সহজ। কিন্তু দ্বিতীয়টি আরও সঠিক।"

"আশ্চর্যজনকভাবে, ইন্টারনেটে প্রচুর থ্রেড স্টেট ডায়াগ্রাম রয়েছে এবং সেগুলি সবই আলাদা।"

"তাই আমি আপনাকে এই চিত্রটি দিয়েছি - এটি সবচেয়ে সম্পূর্ণ এবং সঠিক।"

"এই ডায়াগ্রামে, প্রস্তুত এবং চলমান অবস্থাগুলিকে রানেবল বলে একটি একক ব্লকে একত্রিত করা হয়েছে। আপনি কি জানেন কেন?"

"না। এই প্রথম আমি এরকম কিছু দেখলাম।"

" থ্রেড ক্লাসে স্টেট নামে একটি অভ্যন্তরীণ শ্রেণী রয়েছে , সেইসাথে একটি পাবলিক স্টেট getState() পদ্ধতি রয়েছে।"

উদাহরণ
public enum State
{
 NEW,
 RUNNABLE,
 BLOCKED,
 WAITING,
 TIMED_WAITING,
 TERMINATED;
}

"আপনি সবসময় একটি থ্রেড অবজেক্টে getState () পদ্ধতিতে কল করতে পারেন এবং এর বর্তমান অবস্থা খুঁজে বের করতে পারেন। এবং অবশ্যই, এটি রাষ্ট্রীয় এনাম মানগুলির মধ্যে একটি হবে।"

"আমি দেখতে পাচ্ছি। তাই, আসল স্টেটগুলো JVM-এর ভিতরে আছে, কিন্তু এমন স্টেটও আছে যেগুলো আপনি State getState() মেথড ব্যবহার করে জাভা কোডের মাধ্যমে অ্যাক্সেস করতে পারবেন।"

"এবং কোন পরিস্থিতিতে আমি এটি ব্যবহার করব?"

"সম্ভবত, কখনই না।"

"কিন্তু আপনাকে জানতে হবে থ্রেডের ভিতরে কি ঘটছে। অন্যথায়, আপনার প্রচুর বাগ থাকবে, এবং আপনি অনুমান করতেও পারবেন না যে সেগুলি কী ঘটছে।"

"এছাড়া, নিয়োগকর্তারা সাক্ষাত্কারের সময় থ্রেড স্টেট সম্পর্কে জিজ্ঞাসা করতে পছন্দ করেন।"