Java ကျူတိုရီရယ်များ

Java ပင်မစာမျက်နှာ Java မိတ်ဆက် Java စတင်လိုက်ပါ။ Java Syntax Java မှတ်ချက်များ Java Variables များ Java Data အမျိုးအစားများ Java အမျိုးအစား Casting Java Operator များ Java စာတန်းများ Java သင်္ချာ Java Booleans Java ဆိုလျှင်... အခြား Java Switch Java while Loop Java For Loop Java Break/Continue Java Arrays

Java နည်းလမ်းများ

Java နည်းလမ်းများ Java Method ကန့်သတ်ချက်များ Java Method လွန်ကဲခြင်း။ Java နယ်ပယ် Java Recursion

Java အတန်းများ

Java OOP Java အတန်းများ/အရာဝတ္ထုများ Java Class Attribute များ Java Class Methods Java တည်ဆောက်သူများ Java ပြုပြင်မွမ်းမံမှုများ Java Encapsulation Java Packages / API Java အမွေအနှစ် Java Polymorphism Java အတွင်းပိုင်းအတန်းများ Java Abstraction Java Interface Java စာရင်းများ Java အသုံးပြုသူ ထည့်သွင်းမှု Java နေ့စွဲ Java ArrayList Java LinkedList Java HashMap Java HashSet Java Iterator Java Wrapper အတန်းများ Java ခြွင်းချက်များ Java RegEx Java Threads Java Lambda

Java ဖိုင်ကို ကိုင်တွယ်ခြင်း။

Java ဖိုင်များ Java ဖိုင်များကို ဖန်တီး/ရေးပါ။ Java ဖိုင်များကိုဖတ်ပါ။ Java ဖိုင်များကိုဖျက်ပါ။

Java လုပ်နည်း

နံပါတ်နှစ်ခုထည့်ပါ။

Java အကိုးအကား

Java သော့ချက်စာလုံးများ Java စာတန်းနည်းလမ်းများ Java သင်္ချာနည်းလမ်းများ

Java ဥပမာများ

Java ဥပမာများ Java Compiler Java လေ့ကျင့်ခန်းများ Java Quiz Java လက်မှတ်


Java Threads


Java Threads

Threads သည် ပရိုဂရမ်တစ်ခုအား အရာများစွာကို တစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းဖြင့် ပိုမိုထိရောက်စွာလည်ပတ်နိုင်စေပါသည်။

ပင်မပရိုဂရမ်ကို မနှောင့်ယှက်ဘဲ နောက်ခံတွင် ရှုပ်ထွေးသောအလုပ်များကို လုပ်ဆောင်ရန် Thread များကို အသုံးပြုနိုင်သည်။


Thread ဖန်တီးခြင်း။

thread တစ်ခုဖန်တီးရန် နည်းလမ်းနှစ်ခုရှိသည်။

Threadအတန်းကို တိုးချဲ့ပြီး ၎င်း၏ run() နည်းလမ်းကို အစားထိုး ခြင်းဖြင့် ၎င်းကို ဖန်တီးနိုင်သည် ။

Syntax ကို ထပ်တိုးပါ။

public class Main extends Thread {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

thread တစ်ခုဖန်တီးရန်နောက်ထပ်နည်းလမ်းမှာ Runnableinterface ကိုအကောင်အထည်ဖော်ရန်ဖြစ်သည်

Syntax ကိုအကောင်အထည်ဖော်ပါ။

public class Main implements Runnable {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

Running Threads

class သည် class ကို တိုးချဲ့ပါက၊ class ၏ instance တစ်ခုကို ဖန်တီးပြီး ၎င်း၏ method Threadကိုခေါ်ဆိုခြင်းဖြင့် thread ကို run နိုင်သည် -start()

နမူနာကို ထပ်တိုးပါ။

public class Main extends Thread {
  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

အကယ်၍ class သည် Runnableinterface ကိုအကောင်အထည်ဖော်ပါက၊ class ၏ instance တစ်ခုကို Threadobject ၏ constructor သို့ပေးပို့ပြီး thread ၏ start()method ကိုခေါ်ခြင်းဖြင့် thread ကို run နိုင်သည်-

နမူနာကို အကောင်အထည်ဖော်ပါ။

public class Main implements Runnable {
  public static void main(String[] args) {
    Main obj = new Main();
    Thread thread = new Thread(obj);
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

"ဖြန့်ကျက်ခြင်း" နှင့် "အကောင်အထည်ဖော်ခြင်း" Threads အကြား ကွာခြားချက်များ

အဓိက ကွာခြားချက်မှာ class တစ်ခုသည် Thread class ကို တိုးချဲ့လိုက်သောအခါတွင် သင်သည် အခြား class တစ်ခုခုကို ချဲ့ထွင်၍ မရသော်လည်း Runnable interface ကို အကောင်အထည်ဖော်ခြင်းဖြင့်၊ အခြား class မှလည်း ထပ်တိုးနိုင်သည်- class MyClass extends OtherClass implements Runnable.


ဆက်စပ်ငွေကြေးပြဿနာများ

ပရိုဂရမ်၏အခြားအစိတ်အပိုင်းများနှင့် တစ်ချိန်တည်းတွင် thread များလည်ပတ်နေသောကြောင့်၊ ကုဒ်သည် မည်သည့်အစီအစဥ်တွင် လုပ်ဆောင်မည်ကို သိနိုင်မည်မဟုတ်ပေ။ စာတွဲများနှင့် ပင်မပရိုဂရမ်များသည် တူညီသောကိန်းရှင်များကို ဖတ်ပြီး ရေးသားသည့်အခါ၊ တန်ဖိုးများသည် ခန့်မှန်း၍မရပေ။ ယင်းမှ ဖြစ်ပေါ်လာသော ပြဿနာများကို ဆက်စပ်ပြဿနာများဟု ခေါ်သည်။

ဥပမာ

ပြောင်းလဲနိုင်သော ပမာဏ ၏တန်ဖိုးကို ခန့်မှန်း၍မရသော ကုဒ်နမူနာတစ်ခု။

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println(amount);
    amount++;
    System.out.println(amount);
  }

  public void run() {
    amount++;
  }
}

တူညီသောပြဿနာများကိုရှောင်ရှားရန်၊ တတ်နိုင်သမျှ threads များကြားရှိအရည်အချင်းအနည်းငယ်ကိုမျှဝေရန်အကောင်းဆုံးဖြစ်သည်။ အကယ်၍ attribute များကို မျှဝေရန် လိုအပ်ပါက၊ ဖြစ်နိုင်ချေရှိသော ဖြေရှင်းချက်တစ်ခုမှာ thread ၏ isAlive() method ကို အသုံးပြုပြီး thread သည် thread ပြောင်းလဲနိုင်သော attribute များကို အသုံးမပြုမီတွင် thread လည်ပတ်မှုပြီးသွားခြင်းရှိမရှိ စစ်ဆေးရန်ဖြစ်သည်။

ဥပမာ

isAlive()တူညီသောပြဿနာများကိုကာကွယ်ရန် အသုံးပြု ပါ

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    // Wait for the thread to finish
    while(thread.isAlive()) {
    System.out.println("Waiting...");
  }
  // Update amount and print its value
  System.out.println("Main: " + amount);
  amount++;
  System.out.println("Main: " + amount);
  }
  public void run() {
    amount++;
  }
}