কম্পিউটার টিউটোরিয়াল

জাভা কনকারেন্সি - yield() মেথড


yield ফাংশন

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

যখন থ্রেড java.lang.Thread.yield মেথড কল করে, এটি থ্রেড শিডিউলারের জন্য তার এক্সিকিউশন পজ রাখার একটি ইন্ডিকেশন। থ্রেড শিডিউলার এই ইন্ডিকেশন মেনে নেওয়া বা বাদ দেওয়া যেকোনো একটি বেছে নিতে পারে।

যদি থ্রেড 'yield' ফাংশন এক্সিকিউট করে, শিডিউলার চেক করে দেখে একই বা উচ্চতর প্রায়োরিটি वाला কোনো থ্রেড আছে কিনা। যদি থাকে, বর্তমান থ্রেডটি রানেবল বা রেডি স্টেটে চলে যায় এবং সেই থ্রেডটিকে প্রসেসর রিসোর্স দেওয়া হয়।

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

Demo ক্লাস Thread ক্লাস এক্সটেন্ড করে। এখানে, একটি 'run' ফাংশন সংজ্ঞায়িত করা হয়েছে যা এলিমেন্টের একটি সেটের ওভার ইটেরেট করে এবং 'getName' ফাংশন ব্যবহার করে থ্রেডের নাম প্রাপ্ত করে। 'Demo_one' নামে একটি ক্লাস main ফাংশন সংজ্ঞায়িত করে যেখানে একটি নতুন ইনস্ট্যান্স তৈরি করা হয়েছে এবং 'start' ফাংশন ব্যবহার করে এটি শুরু করা হয়েছে। এখানও এলিমেন্টগুলো ইটেরেট করা হয়েছে এবং থ্রেডের ওপর yield ফাংশন কল করা হয়েছে।

  • যখন থ্রেড yield মেথড ব্যবহার করে এক্সিকিউশন সম্পন্ন করে, প্রসেসর রিসোর্সের জন্য অনেক থ্রেড প্রতিযোগিতা করে। কোন থ্রেড আগে এক্সিকিউট হবে তা নির্দিষ্ট করার কোন উপায় নেই।

  • যখন থ্রেড yield মেথড এক্সিকিউট করে, এটি Running স্টেট থেকে Runnable স্টেটে চলে যায়।

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

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

  1. জাভাতে Thread.start() বদলে Thread.run() কখন কল করা উচিত?

  2. জাভাতে অ্যানোনিমাস ক্লাস ব্যবহার করে থ্রেড তৈরি করা

  3. জাভাতে isDaemon() মেথডের গুরুত্ব

  4. জাভা ৮-এ ইন্টারফেস এনহ্যান্সমেন্ট