Friday, September 10, 2010

ජාවා යොදාගෙන බහුකාර්‍ය වැඩසටහන් ලිවීම (Java Threads) I

පරිගණක වැඩසටහනක් සැලසුම් කිරීමේදී එය මගින් යම් යම් ක්‍රියාවන්(methods) එකවිට(parallel) සිදුකලයුතු අවස්ථා අපට මුණගැසේ. Multitasking සඳහා උදාහරණයක් ලෙස web browser එකක tabs කිහිපයක් එකවිට load වීම ගත හැකිය.  එවැනි අවස්ථාවන් ක්‍රියාවට නැංවීම (implement) සඳහා multitasking සංකල්පය භාවිතයට ගත හැකිය.

Multitasking වැඩසටහන්හි පහත අයුරින් ප්‍රධාන ආකාර 2ක් දැකිය හැකිය.

    * Process Based

මෙහිදී සිදුවනුයේ පරිගණකයේ වැඩසටහන් කීපයක්  සමගාමීව ක්‍රියාකිරීමෙන් අදාල ප්‍රතිඵලය ලබාදීමයි. process අතර සන්නිවේදනය(දත්ත හුවමාරුව) පහසු නොවේ. ඒ සඳහා pipes, files, sockets, shared memory ආදී විවිධ උපක්‍රම යොදාගැනීමට සිදුවේ.

    * Thread Based

මෙහිදී සිදුවනුයේ එක් වැඩසටහනක් මගින් කාර්‍යයන් කිහිපයක් සමගාමීව සිදුකර අදාල ප්‍රතිඵලය ලබාදීමයි. මෙහිදී අදාල වැඩසටහන තුල Threads ලෙසින් පවතින කාර්‍යයන් කිහිපය කලමණාකරණය කිරීම මගින් ප්‍රතිඵලය ලබාගැනේ. සියලුම threads මගින් එකම address space එක share කරගන්නා නිසා threads අතර සන්නිවේදනය සාපේක්ෂව පහසුය.

අපි මෙහිදී සලකනුයේ Java යොදාගෙන multitasking සිදුකිරීමයි. මුලින් සඳහන් කල multitasking අකාරය හෙවත් process based multitasking ජාවාහි පාලනයෙන් ඔබ්බෙන් පවතින නිසා ජාවාතුල multitasking සිදුකරනුයේ threads යොදාගැනීමෙනි. Process based multitasking සිදුකිරීම C/C++ වැනි භාෂා යොදාගැනීමෙන් සිදුකල හැක.

ඕනෑම ජාවා වැඩසටහනක මුලින්ම ආරම්භ වන thread එක වනුයේ main thread එකයි.

ජාවා තුල මූලිකව threads ප්‍රභේද 2ක් පවතී. එනම් Thread class එක සහ Runnable interface එකයි. එම නිසා ජාවාහි Threads සෑදිය හැකි මූලිකම ක්‍රම දෙක වනුයේ
  1. java.lang.Thread class එක Extend කර run()   method එක override කිරීම
  2. java.lang.Runnable interface එක implement කර run() method එක implement කිරීම.
Note : extend කිරීම සහ interfaces පිලිබඳ පෙර පාඩම් නැවත මතක් කරගැනීමට අවශ්‍ය නම් පහත සබැඳි භාවිතා කරන්න.
ජාවා interface සංකල්පය සහ එහි යෙදීම්
ජාවා වස්තු පාදක ක්‍රමලේඛනය VI (Inheritance) :: 1 කොටස
Thread class එක extend කිරීම
TestThread.java 


class TestThread{
 public static void main(String args[]){
  MyTask mt1=new MyTask();
  mt1.start(); //start the thread
 }
}

class MyTask extends Thread {

 public void run(){
  //do some task
 }
}

Runnable interface එක implement කිරීම
TestThreadRunnable.java
 

class TestThreadRunnable{
 public static void main(String args[]){
  Thread t1=new Thread(new MyTask());
  t1.start(); //start the thread
 }
}

class MyTask implements Runnable {

 public void run(){
  //do some task
 }
}
අපි ඊලඟ පාඩමෙන් threads පිලිබඳ තවදුරටත් හදාරමු.

8 comments:

  1. හොදයි ThreadExecutor, newCachedThreadPool වගේ එවත් ලියන්න.

    ReplyDelete
  2. ඔබගේ අදහස් දැක්වීමට ස්තුතියි. ඉදිරි පාඩම් වලදී ඒවා ගැනත් ලියන්නම්.

    ReplyDelete
  3. වටින ලිපියක්, ගොඩක් ප්‍රයෝජනවත් blog අඩවියක්... දිගටම කරගෙන යන්න.

    පුළුවන් නම් JAVA වලින් හදපු apps (free & open) , ටිකක් දාලා විස්තර කරන්න. පාඩම්වල කොටස් ඒවයේ යෙදෙන හැටි, apps වල common errors වගේ ඒවා...

    ReplyDelete
  4. Mr. Mc
    ස්තුතියි ඔබේ අදහසට.
    හොඳ අදහසක් ඔබ ගෙනාවේ.
    ලියන්න නම් ගොඩක් දේවල් ඉතිරිවෙලා තියනව.

    නිදහසක් එන විධියට හැකි උපරිමෙන් ඒ දේවල් ලියන්න බලාපොරොත්තු වෙනව.

    ReplyDelete
  5. මචන් ඉන්ට්වීව් වලට යන අය ඉන්නවනම් අනිවාර් අහන එකක් මේ topic එක

    ReplyDelete
  6. මචන් ඉන්ට්වීව් වලට යන අය ඉන්නවනම් අනිවාර් අහන එකක් මේ topic එක

    ReplyDelete
  7. නියමයි මචං. ඔහොම යං...

    ReplyDelete