Մասնակից: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(); }
}