थ्रेड का जीवन चक्र (Life Cycle of Thread)

किसी थ्रेड के सम्पूर्ण जीवन काल में निम्न पाँच अवस्थायें आ सकती हैं -

  • Newborn State
  • Runnable State
  • Running State
  • Blocked State
  • Dead State

थ्रेड सदैव उपुर्युक्त पाँच अवस्थाओं में से किसी न किसी एक अवस्था में अवष्य रहता है।

Newborn State

जब कोई थ्रेड आॅब्जेक्ट बनाया जाता है तो वह इस समय Newborn State में होता है। इस समय थ्रेड पर निम्न दो कार्य किए जा सकते हैं -

  • start( ) मैथड द्वारा उसे रनेबल स्टेट में लाना।
  • stop( ) मैथड द्वारा समाप्त कर देना।

Runnable State

जब कोई थ्रेड कार्यान्वित होने की स्थिति में होता है तो उसे Runnable State कहते हैं। वह थ्रेड जिसकी प्राथमिकता (priority) अधिक होती है वह पहले कार्यान्वित होता है, यदि सभी थ्रेड्स की प्राथमिकता समान हो तो वे पहले आओ पहले पाओ (first come first serve) के आधार पर कार्यान्वित होते हैं।

Running State

जब कोई थ्रेड कार्यान्वित हो रहा होता है तो वह Running State में कहलाता है। यहाँ थ्रेड पर निम्न मैथड्स का प्रयोग किया जा सकता है -

  • suspend( ) - इससे थ्रेड ब्लाॅक्ड स्टेट (blocked state) में चला जाता है जहाँ से उसे पुनः resume( ) मैथड द्वारा रनेबल स्टेट में लाया जा सकता है।
  • sleep( ) - इससे थ्रेड निष्चित समय के लिए ब्लाॅक्ड स्टेट में चला जाता है जहाँ से वह समय पूरा होने पर पुनः रनेबल स्टेट में आ जाता है।
  • wait( ) - इससे थ्रेड ब्लाॅक्ड स्टेट में चला जाता है जहाँ से उसे पुनः notify( ) मैथड द्वारा रनेबल स्टेट में लाया जा सकता है।

Blocked State

जब थ्रेड पर suspend( ), sleep( ) या wait( ) मैथड का प्रयोग किया जाता है तो वह ब्लाॅक्ड स्टेट में आ जाता है। यहां से पुनः थ्रेड को resume( ), notify( ) मैथड द्वारा रनेबल स्टेट में भेजा जा सकता है।

Dead State

जब थ्रेड की सभी स्टेटमेन्ट्स कार्यान्वित हो जाती हैं तो वह Dead State में आ जाता है। अन्यथा उसे stop( ) मैथड द्वारा Dead State में लाया जा सकता है।

नीचे दिए गए उदाहरण में yield( ), sleep( ) तथा stop( ) मैथड का प्रयोग दर्शाया गया है।

class A extends Thread
{
  public void run()
  {
    int i;
    for(i=1; i<=10; i++)
    {
      if(i == 1)
        yield();
      System.out.print("A=" + i + ",");
    }
  }
}
class B extends Thread
{
  public void run()
  {
    int j;
    for(j=1; j<=10; j++)
    {
      if(j == 3)
      {
      try
      {
        sleep(1000);
      }
      catch(Exception e)
      {}
      }
      if(j == 4)
        stop();
      System.out.print("B=" + j + ",");
    }
  }
}
public class demo
{
  public static void main(String arr[])
  {
    A o1 = new A();
    B o2 = new B();
    o1.start();
    o2.start();
   }
}

Output:

A=1,A=2,A=3,A=4,A=5,A=6,A=7,B=1,B=2,A=8,A=9,A=10,B=3,
सुझाव / कमेंट