থ্রেডিং হলো একটি কাজ আর মাল্টিথ্রেডিং হলো অনেকগুলো কাজ। সাধারণত যে অপারেটিং সিষ্টেম একসাথে অনেকগুলোকাজকরতেপারেতাকেমাল্টিথ্রেডেড অপারেটিং সিষ্টেমবলে। অপারেটিংসিষ্টেম উদ্ভাবনেরপ্রাথমিকপর্যায়েএকটিমাত্রকাজকরতেপারত। সেসবঅপারেটিংসিষ্টেমকে সিঙ্গেল থ্রেডেড অপারেটিংসিষ্টেমবলাহয়। তবে, বর্তমানেপ্রচলিত সবঅপারেটিংসিষ্টেমই এক সাথে অনেককাজকরতেপারে যেমনএকসাথে গান শোনার সাথে সাথে প্রয়োজনীয়অন্যান্য কাজওসম্পাদনকরাযায়। এজন্য এগুলোকেমাল্টিথ্রেডেড অপারেটিংসিষ্টেমবলে। মাল্টিথ্রেড কমপিউটারঅ্যাপিস্নকেশনগুলোকেবহুমাত্রিকতা দিয়েছেএবংমানুষেরকাঙ্খিতজীবনকেআরও প্রযুক্তি নির্ভরকরে দিয়েছে।
সবকাজগুলোইপ্রসেসরেরমাধ্যমে রানকরে। তাই
একই সাথে অনেকগুলোকাজকরারসময় কোনোকাজকেসাময়িকবন্ধ রেখে, আবার কোনোকাজকেপুরোপুরিবন্ধকরেবাপ্রসেসিংকেকাজগুলোরমধ্যে শেয়ারকরেপরিচালিতকরে।জাভা থ্রেডিং প্রোগ্রামকেsleep, stop()মেথডব্যবহারকরেবন্ধকরেআবারresume()মেথডব্যবহারকরেআবার থ্রেডকে চালায়। ফলেপ্রসেসরেরউপর স্বয়ংক্রিয়ভাবেচাপকমেএবংজাভা প্রোগ্রাম সুন্দরভাবেরানকরে।
জাভাতে দুটিপদ্ধতিতে থ্রেডিংঅ্যাপিস্নকেশনকরাহয়।
১। Threadক্লাসকে এক্সটেন্ড করে।
২। Runnable interface ইমপিস্নমেন্ট করে।
Threadক্লাস
এই ক্লাসেরপ্রয়োজনীয় কনস্ট্রাক্টরএবং মেথডরয়েছেযারমাধ্যমে Threadনিয়েকাজকরাযায়।
Threadক্লাসে বেশিব্যবহারহওয়াকনস্ট্রাক্টরসমূহ
ক। Thread()
খ। Thread(String name)
গ। Thread(Runnable r)
ঘ। Thread(Runnable r,String name)
Threadক্লাসের বেশিব্যবহারহওয়া মেথডসমূহ
run(): থ্রেডের কোনোকাজকরতেব্যবহারহয়।
start():থ্রেড এক্সিকিউশনকরতেব্যবহারহয়। এরমাধ্যমে জাভাভার্চুয়াল মেশিন থ্রেডের run() মেথডকেকাজশুরুকরতেবলে।
sleep(long miliseconds):এই মেথডে দেয়া সংখ্যাকেমিলিসেকেন্ডহিসেবেধরে থ্রেডকে চলারসময়বিরতরাখে।
getPriority():থ্রেডের প্রায়োরিটিরিটার্ন করে।
setPriority(int priority):থ্রেডের প্রায়োরিটি সেটকরারজন্য ব্যবহারহয়।
getName():থ্রেডের নাম দেখায়।
setName(String name):থ্রেডের নাম সেটকরতেব্যবহারহয়।
currentThread(): বর্তমানেচলমান থ্রেডের রেফারেন্সরিটার্ন করে।
getId():থ্রেডের আইডিরিটার্ন করে।
getState():থ্রেডেরবর্তমানঅবস্থা সম্পর্কে অবহিতকরে।
isAlive():থ্রেডবর্তমানেAliveআছেকিনাতানিশ্চিতকরে।
suspend():থ্রেডসাসপেন্ডকরতেব্যবহারহয়।
resume(): সাসপেন্ডেড থ্রেডকে পুনরায়চলারজন্য আহবানকরে।
stop():থ্রেডবন্ধকরতেব্যবহারহয়। সাসপেন্ডএবং স্টপ এরমধ্যে পার্থক্য হলোসাসপেন্ডেকিছুসময়েরজন্য থ্রেড বন্ধ থাকে। আর স্টপ মেথডেরমাধ্যমে থ্রেডের কাজকেসম্পূর্ণভাবেবন্ধকরাহয়।
isDaemon():থ্রেডটিকিইউজার থ্রেড কিনাতাজানায়।
setDaemon(boolean b):থ্রেডকে ইউজার থ্রেড হিসেবেডিফাইনকরাহয়।
interrupt():থ্রেডের কাজকেইন্টারাপ্টকরতেব্যবহারহয়।
MyThread.javaপ্রোগ্রাম
classMyThread extends Thread
{
public static void main(String args[])
{
Thread t=Thread.currentThread();
System.out.println("The current thread is " + t);
t.setName("MyJavaThread");
System.out.println("The thread is now named:" + t);
try
{
for (int i=0; i<5; i++)
{
Thread.sleep(1000);
System.out.println("This text is printing after one second each time");
}
}
catch(InterruptedException e)
{
System.out.println("Main thread interupted");
}
}
}
প্রোগ্রামটিরানকরারপদ্ধতিঅন্যান্য জাভা প্রোগ্রামেরমতই। আমরারানকরারজন্য জাভারJdk1.4ভার্সনব্যবহারকরবএবং প্রোগ্রামগুলোD:\ড্রাইভের java ফোল্ডারে সেভ করব। উপরেরপ্রোগ্রামটি নোটপ্যাডেটাইপকরেMyThread.javaনামে সেভ করতেহবে।
চিত্রঃরানকরারপদ্ধতি
প্রোগ্রামটিতেcurrentThread()মেথডব্যবহারকরাহয়েছে। ফলে কোন থ্রেড রানকরছেতা দেখাচ্ছে। বাইডিফল্ট যেকোনজাভা প্রোগ্রাম মেইন থ্রেড থেকে কাজকরে থাকে।তাই মেইন মেথড দেখিয়েছে। পরবর্তীসময়setName মেথডব্যবহারকরে থ্রেডের নামপরিবর্তনকরাহয়েছে। সবশেষে থ্রেডটিচলারসময় ১ সেকেন্ড পর পরএকটি লেখাপ্রিন্টকরারজন্য sleep()মেথডব্যবহারকরাহয়েছেযার ভেল্যু দেয়া হয়েছে ১০০০ মিলিসেকেন্ড।
চিত্রঃরানকরার পর আউটপুট
Runnable interfaceইমপিস্নমেন্ট
Runnable interfaceইমপিস্নমেন্টকরেও থ্রেড প্রোগ্রাম তৈরিকরাযায়। এরrun()নামেএকটিমাত্র মেথডরয়েছে।Runnable interfaceকেইমপিস্নমেন্টকরার প্রোগ্রামনিচে দেয়া হলো। প্রোগ্রামটিMemorialStand.java নামে সেভ করতেহবে।
importjava.awt.*;
importjava.applet.Applet;
/*
*/
public class MemorialStand extends Applet implements Runnable
{
intx1[]={20,60,100,140,180,220,260,300,340,340};
int y2[]={372,340,310,270,170,120,80,30,5, 420};
int x2[]={720,680,640,600,560,520,480,440,400,400};
int j=0, k=0, red=0, green=0, blue=0; //initialization
public void init()
{
new Thread (this).start();
}
public void update (Graphics g)
{
g.fillRect(20,450,700,40);
//Draw Memorial Stand
red=(int)(Math.random()*255.0);
green=(int)(Math.random()*255.0);
blue=(int)(Math.random()*255.0);
g.setColor (new Color (red,green, blue));
for(k=0;k<=9;k++)
{
g.drawLine(x1[k],450,380,y2[k]);
g.drawLine(x2[k],450,380,y2[k]);
}
// draw flag
g.drawLine (380,420,380,5);
g.setColor(Color.green);
g.fillRect(380,170,100,70);
g.setColor(Color.red);
g.fillOval(410,190,50,35);
}
public void run()
{
for (j=0; ;j++)
{
try
{
Thread.sleep (1000);
}
catch(Exception e){}
if (j==14)j=0;
repaint();
}
}
}
চিত্রঃরানকরারপদ্ধতি
চিত্রঃরানকরার পর আউটপুট
মোঃ আব্দুল কাদের
balaith@gmail.com