Մասնակից:Gorikros/Ավազարկղ

Վիքիպեդիայից՝ ազատ հանրագիտարանից

Բազմահոսքայնությունը ծրագրավորման տեխնոլոգիա է, որի շնորհիվ ծրագրում կարող ենք ունենալ 2 և ավելի կտորներ, որոնք կարող են իրագործվել միաժամանակ՝ նույն ռեսուրսի հետ աշխատելու հնարավորությամբ: Ամեն մի կտոր կարող է լուծել տարբեր խնդիր, դրանով հասանելի ռեսուրսների (օրինակ՝ մի քանի պրոցեսորի առկայություն) օգտագործումը դարձնելով ավելի օպտիմալ:

Մի քանի պրոցեսների կողմից ընդհանուր ռեսուրսի կիսելը կոչվում է Multitasking: Բազմահոսքայնությունը ընդլայնում է Multitasking-ի գաղափարը և հնարավորություն է ստեղծվում բացի ՕՀ-ում զուգահեռ ընթացող ծրագրերից (պրոցեսներից), ունենալ նաև զուգահեռ ընթացող հոսքեր՝ մի ծրագրի մեջ:

Հոսքը ին կյանքի ընթացքում անցնում է տարբեր փուլերով:

picture of life stages of thread

Java լեզվում ցանկացած հոսք ունի իր առաջնայնությունը, որը օգնում է ՕՀ-ին սահմանել դրանց իրագործման հերթականությունը: Այդ առաջնայնությունը որոշվում է 1-10 միջակայքի թվերով, որը հոսք ստեղծելուց չնշելու դեպքում ավտոմատ կլինի 5: Սակայն այնուամենայնիվ 100 տոկոսով երաշխավորված չէ, թե ինչ հերթականությամբ կիրագործվեն հոսքերը: Այն հիմնականում կախված է ՕՀ-ի տեսակից:

Java-ում դասը որպես հոսք իրագործելու համար տվյալ դասը պետք է իմպլեմենտացնի Runnable ինտերֆեյսը: Տվյալ դասը պետք է նաև սահմանի վերջինիս կողմից հայտարարված public void run() մեթոդը:

Հոսքը սկսելու համար պետք է կանչել start() մեթոդը, որը նույնպես պետք է սահմանել:

class WikiThread implements Runnable {

   private Thread t;
   private String threadName;
  
   WikiThread(String name){
       threadName = name;
       System.out.println("Creating " +  threadName );
   }
  
   public void run() {
       System.out.println("Running " +  threadName );
       try {
           for(int i = 4; i > 0; --i) {
               System.out.println("Thread: " + threadName + ", " + i);
               Thread.sleep(50);
           }
       }
       catch (InterruptedException e) {}
       
       System.out.println("Thread " +  threadName + " exiting.");
   }
  
   public void start() {
       System.out.println("Starting " +  threadName );
       if (t == null) {
           t = new Thread (this, threadName);
           t.start();
       }
   }

}

public class Wiki {

   public static void main(String[] args) {
       WikiThread R1 = new WikiThread("Thread-1");
       R1.start();
     
       WikiThread R2 = new WikiThread("Thread-2");
       R2.start();
   }   

}

Հոսք կարելի է ստեղծել նաև ժառանգելով Thread դասից և վերասահմանելով public void run() public void start() մեթոդները:

class ThreadDemo extends Thread {

   private Thread t;
   private String threadName;
  
   ThreadDemo( String name){
       threadName = name;
       System.out.println("Creating " +  threadName );
   }
   
   public void run() {
       System.out.println("Running " +  threadName );
       try {
           for(int i = 4; i > 0; i--) {
               System.out.println("Thread: " + threadName + ", " + i);
               // Let the thread sleep for a while.
               Thread.sleep(50);
           }
       }
       catch (InterruptedException e) {
           System.out.println("Thread " +  threadName + " interrupted.");
       }
       
       System.out.println("Thread " +  threadName + " exiting.");
   }
  
   public void start() {
       System.out.println("Starting " +  threadName );
       if (t == null) {
           t = new Thread (this, threadName);
           t.start();
       }
   }

}

public class WikiThread {

   public static void main(String args[]) {
  
       ThreadDemo T1 = new ThreadDemo("Thread-1");
       T1.start();
     
       ThreadDemo T2 = new ThreadDemo("Thread-2");
       T2.start();
   }   

}