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 တစ်ခုဖန်တီးရန်နောက်ထပ်နည်းလမ်းမှာ Runnable
interface ကိုအကောင်အထည်ဖော်ရန်ဖြစ်သည်
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 သည် Runnable
interface ကိုအကောင်အထည်ဖော်ပါက၊ class ၏ instance တစ်ခုကို Thread
object ၏ 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++;
}}