কম্পিউটার

জাভা কনকারেন্সি - yield() পদ্ধতি


ফলন ফাংশন

ফাংশনটি নিশ্চিত করার চেষ্টা করে যে যে থ্রেডটি কার্যকর হতে অনেক বেশি সময় নিচ্ছে এবং তাও গুরুত্বপূর্ণ নয় তার চেয়ে বেশি গুরুত্বপূর্ণ থ্রেডটি আগে চলে।

যখন থ্রেড java.lang.Thread.yield মেথড কল করে, তখন এটি থ্রেড শিডিউলারের জন্য একটি ইঙ্গিত দেয় যে এটির এক্সিকিউশন পজ করবে। থ্রেড সময়সূচী এই ইঙ্গিত গ্রহণ বা উপেক্ষা করতে পছন্দ করে।

যদি থ্রেডটি 'ইল্ড' ফাংশনটি কার্যকর করে, তাহলে শিডিউলকারী পরীক্ষা করে দেখেন যে একই বা উচ্চতর অগ্রাধিকার সহ একটি থ্রেড উপস্থিত আছে কিনা। যদি তাই হয়, বর্তমান থ্রেডটি চালানোর যোগ্য বা প্রস্তুত অবস্থায় সরানো হয় এবং সেই থ্রেডটিকে প্রসেসর সংস্থান দেওয়া হয়৷

ফলন ফাংশনের সিনট্যাক্স

public static native void yield()

আসুন একটি উদাহরণ দেখি -

উদাহরণ

import java.lang.*;
class Demo extends Thread{
   public void run(){
      for (int i=0; i<3 ; i++)
      System.out.println("In control of " + Thread.currentThread().getName() + " thread");
   }
}
public class Demo_one{
   public static void main(String[]args){
      Demo my_obj = new Demo();
      my_obj.start();
      for (int i=0; i<3; i++){
         Thread.yield();
         System.out.println("In control of " + Thread.currentThread().getName() + " thread");
      }
   }
}

আউটপুট

In control of main thread
In control of main thread
In control of main thread
In control of Thread-0 thread
In control of Thread-0 thread
In control of Thread-0 thread

ডেমো নামের একটি ক্লাস থ্রেড ক্লাস প্রসারিত করে। এখানে, একটি 'রান' ফাংশন সংজ্ঞায়িত করা হয়েছে যা উপাদানগুলির একটি সেটের উপর পুনরাবৃত্তি করে এবং 'getName' ফাংশন ব্যবহার করে থ্রেডের নাম পায়। 'Demo_one' নামের একটি ক্লাস প্রধান ফাংশনকে সংজ্ঞায়িত করে যেখানে একটি নতুন উদাহরণ তৈরি করা হয় এবং এটি 'স্টার্ট' ফাংশন ব্যবহার করে শুরু করা হয়। এখানেও, উপাদানগুলিকে পুনরাবৃত্ত করা হয় এবং থ্রেডে ফলন ফাংশন বলা হয়।

  • একবার ফলন পদ্ধতি ব্যবহার করে থ্রেডটি কার্যকর করা শেষ হলে, অনেক থ্রেড রয়েছে যা প্রসেসর সংস্থানগুলির জন্য প্রতিযোগিতা করে। কোন থ্রেডটি প্রথমে কার্যকর হবে তা নির্দিষ্ট করার কোন উপায় নেই।

  • একবার থ্রেডটি ফলন পদ্ধতি কার্যকর করলে, এটি চলমান অবস্থা থেকে রানযোগ্য অবস্থায় চলে যায়।

  • ফলন পদ্ধতিটি শুধুমাত্র তখনই ব্যবহার করা যেতে পারে যখন প্ল্যাটফর্মটি প্রি-এমপ্টিভ শিডিউলিং সমর্থন করে৷

  • যখন থ্রেডটি কার্যকর করার সময় বিরতি দেয়, তখন নিশ্চিত করার কোন উপায় নেই যে এটি শীঘ্রই বা পরে একটি সুযোগ পাবে, এটি সবই শিডিউলিং অ্যালগরিদম এবং থ্রেড শিডিউলারের উপর নির্ভর করে৷


  1. জাভাতে Thread.start() এর পরিবর্তে Thread.run() কে কখন কল করবেন?

  2. জাভাতে বেনামী ক্লাস ব্যবহার করে কীভাবে একটি থ্রেড তৈরি করবেন?

  3. জাভাতে isDaemon() পদ্ধতির গুরুত্ব?

  4. জাভা 8 এ ইন্টারফেস বর্ধন