Java

Thread Creation

ভূমিকাঃ

যখনি আমরা পোগ্রাম শুরু করি তখন জাভা অটোমেটিকেলি একটি থ্রেড তৈরি করে, যাকে আমরা মেইন থ্রেড বলি।

এটি থেকেই অন্যান্য বাচ্চা থ্রেড তৈরি হয়, যাদের কাজ বড় বা ছোট হতে পারে।

মেইন থ্রেডের ভূমিকা অনেক। এটি তার বাচ্চা গুলোকে নিয়ন্ত্রণ করতে পারে বিভিন্ন মেথোডের মাধ্যমে।

এই মেইন থ্রেড কে আমরা নিজেদের মত করে নিয়ন্ত্রণ ও করতে পারি।

একটি নির্দিষ্ট ক্লাসের অবজেক্টের থ্রেডের জন্যে সেই ক্লাসে currentThread() মেথোড ব্যবহার করে যেকোন থ্রেডকেই নিয়ন্ত্রণ করা যায়। তবে আমরা বেশিরভাগ

ক্ষেত্রেই অবজেক্টের সাহায্যেই তা করে থাকি।

এই কারেন্ট থ্রেড একটি static method। এটি static method বা ভেরিয়েবল ছাড়া এক্সেস করা যায় না।

থ্রেড তৈরিঃ

জাভাতে বিল্টইন Thread ক্লাস এবং Runnable ইন্টারফেইস আছে। এই দুটির যেকোন একটি ব্যবহার করেই আমরা থ্রেড তৈরি করতে পারি। তবে এই দুটির
মধ্যেই run()

মেথোড থাকা বাঞ্চনীয়।

একটি থ্রেড শুরু হওয়ার সাথে সাথেই এই run() মেথোড কল হয়ে থাকে। আমরা এই রান মেথোডের মাঝে একটি থ্রেডের কাজ ডিফাইন করে দিতে পারি বা
বাহিরেও করতে পারি।

এখানের Runnable ইন্টারফেইস ইমপ্লিমেট করার সময় আমাদের Runnable ইন্টারফেইসের মেথোড গুলো public এক্সেস আকারে ডিফাইন করতে হবে।

******

******

******

প্রথমে আমরা প্রয়োজন মত থ্রেড অবজেক্ট তৈরি করবো। তারপর অবজেক্টের সাহায্য নিয়ে আমরা start() মেথোড দ্বারা থ্রেডের কাজ শুরু করবো।
object.start() লিখার সাথে সাথেই এটি run() মেথোডকে কল করে।

এছাড়াও আমরা আমাদের প্রয়োজন মত থ্রেডকে নিয়ন্ত্রণ করতে পারি বিভিন্ন মেথোড দ্বারা। যা আমাদের কাজকে সহজ করে তুলে। যেমনঃ

sleep()

join()

suspend()

wait()

yield()

currentThread()

isAlive()

নিম্নে আমরা রানেবল ইন্টারফেইস ইমপ্লিমেন্ট করে এবং থ্রেড ক্লাস এক্সটেন্ড করে থ্রেড তৈরি দুটির উদাহরণই দেওয়া হল।

উদাহরণঃ

জাভা বিল্টইন থ্রেড ক্লাসের কিছু কন্সট্রাকটর আছে।

Thread(“Thread_name”);

Thread(Thread_object, “Thread_name”);

নিম্নের উদাহরণে আমরা Thread2 constructor এর মাঝে super() method দ্বারা মূলত সুপারক্লাস Thread এর Thread(“Thread_name”) এই
কন্সট্রাকটর কে কল করেছি।

বিল্টইন থ্রেড ক্লাসকে extends করে………

  1. package javathread;
  2. public class Thread2 extends Thread{
  3. // Creating a new for child thread
  4. Thread2() {
  5. super(“Child Thread”); // pass this name to new thread
  6. /* আমরা যে বাচ্চা থ্রেড তৈরি করেছিলাম তার নাম আমরা এখানে সুপার মেথোডের মাধ্যমে ডিফাইন করলাম। Thread যেহেতু এখানে সাবক্লাস তাই তার
    বিল্টইন মেথোড এক্সেস করতে আমাদের সুপার মেথোড ব্যবহার করতে হবে। */
  7. System.out.println(“Child Thread: ” + this); /* এখানে দিস বলতে চাইল্ড থ্রেড কে বুঝায় */
  8. start(); // বাচ্চা থ্রেড শুরু হল
  9. }
  10. public void run () {
  11. try {
  12. for(int i = 0; i < 5; i++) {
  13. System.out.println(“Child Thread: ” + i );
  14. Thread.sleep(500); /* বাচ্চা থ্রেড ৫০০ মিলি সেকেন্ডের জন্যে অজানা পথে পা দিবে :p */
  15. }
  16. }
  17. catch (Exception e) { }
  18. System.out.println(“Exiting Child Thread: “);
  19. }
  20. }
  21. package javathread;
  22. public class mainThread2 {
  23. public static void main(String[] args) {
  24. new Thread2(); /* বাচ্চা থ্রেডের অবজেক্ট তৈরি করা হল */
  25. Thread t = Thread.currentThread(); /* মেইন থ্রেডের জন্যে অবজেক্ট রেফারেন্স তৈরি করা হল, এই রেফারেন্স t দিয়ে আমরা মেইন থ্রেডকে নিয়ন্ত্রণ
    করতে পারি */
  26. try {
  27. for(int i = 0; i < 5; i++) {
  28. System.out.println(“main Thread: ” + i );
  29. System.out.println(“main Thread: ” + t );
  30. Thread.sleep(500); /* প্রথম থ্রেড কাজ করার পর ৫০০ মিলি সেকেন্ডের ঘুম হবে মেইন থ্রেডের :p এর মধ্যেও কিন্তু অন্য বাচ্চা থ্রেড গুলো তার কাজ
    করতেও পারে নাও করতে পারে। */
  31. }
  32. }
  33. catch (Exception e) { }
  34. System.out.println(“Exiting main Thread: “);
  35. }
  36. }
  37. আউটপুটঃ

Child Thread: Thread[Child Thread,5,main]

/* এখানের প্রথমটি হচ্ছে থ্রেড নেইম, মাঝেরটি পায়োরিটি, শেষেরটি মেইন নাকি বাচ্চা থ্রেড সেটি প্রকাশ করে*/

main Thread: 0

main Thread: Thread[main,5,main]

Child Thread: 0

main Thread: 1

Child Thread: 1

main Thread: Thread[main,5,main]

main Thread: 2

main Thread: Thread[main,5,main]

Child Thread: 2

main Thread: 3

main Thread: Thread[main,5,main]

Child Thread: 3

Child Thread: 4

main Thread: 4

main Thread: Thread[main,5,main]

Exiting main Thread:

Exiting Child Thread:

package javathread;

public class Thread1 implements Runnable {

//Create a new second thread

  1. Thread t; // reference object
  2. Thread1 () {
    t = new Thread(this, “child thread”);
  3. System.out.println(“Child Thread: ” + t);
  4. t.start();
  5. }
  6. // Entry point for second child
  7. public void run () {
  8. try {
  9. for(int i = 0; i < 5; i++) {
  10. System.out.println(“Child Thread: ” + i );
  11. Thread.sleep(500);
  12. }
  13. }
  14. catch (Exception e) { }
  15. System.out.println(“Exiting Child Thread: “);
  16. }
  17. }
  18. package javathread;
  19. public class mainThread {
  20. public static void main(String[] args) {
  21. new Thread1(); // Create a new thread
  22. try {
    for(int i = 0; i < 5; i++) {
  23. System.out.println(“main Thread: ” + i );
  24. Thread.sleep(1000);
  25. }
  26. }
  27. catch (Exception e) { }
  28. System.out.println(“Exiting main Thread: “);
  29. }
  30. }

আউটপুটঃ

Child Thread: Thread[Child Thread,5,main]

main Thread: 0

main Thread: Thread[main,5,main]

Child Thread: 0

Child Thread: 1

main Thread: 1

main Thread: Thread[main,5,main]

main Thread: 2

Child Thread: 2

main Thread: Thread[main,5,main]

Child Thread: 3

main Thread: 3

main Thread: Thread[main,5,main]

main Thread: 4

Child Thread: 4

main Thread: Thread[main,5,main]

Exiting Child Thread:

Exiting main Thread:

Leave a Reply

Your email address will not be published.

4 × four =