1.Thread.sleep()

আপনি একটি জাভা প্রোগ্রাম কার্যকর করার মধ্যে বিরতি সন্নিবেশ করতে পারেন। এটি সাধারণত প্রয়োজনীয় নয়, যেহেতু ব্যবহারকারীরা তাদের প্রোগ্রামগুলি যত তাড়াতাড়ি সম্ভব চালাতে চান। আপনি ইচ্ছাকৃতভাবে আপনার কোড কমিয়ে দিলে অনেক লোক খুশি হবে না।

কিন্তু একজন প্রোগ্রামার হিসাবে, এমন অনেক পরিস্থিতি হতে পারে যেখানে আপনার কোডে একটি বিরতি কার্যকর হবে। উদাহরণস্বরূপ, ধরুন আপনি একটি গেম লিখছেন এবং আপনি এটি প্রতি দুই সেকেন্ডে একবার বা সেকেন্ডে কয়েকবার কিছু করতে চান।

মূলত, বিরতিগুলি দরকারী, তাই আসুন দেখি কীভাবে আপনার কোডে একটি বিরতি যুক্ত করবেন। এটা আসলে খুব সহজ:

Thread.sleep(duration);

যেখানে duration বিরতির দৈর্ঘ্য মিলিসেকেন্ডে ( 1/1000এক সেকেন্ডের)।

duration এই বিবৃতিটি আপনার প্রোগ্রামকে মিলিসেকেন্ডের জন্য বিরতি দেবে । উদাহরণ:

Thread.sleep(2000);
প্রোগ্রামটি 2 সেকেন্ডের জন্য বিরতি দেয়।
Thread.sleep(500);
অর্ধেক সেকেন্ডের জন্য প্রোগ্রাম বিরতি.
Thread.sleep(60 * 60 * 1000);
1 ঘন্টার জন্য প্রোগ্রাম বিরতি.

এটি কীভাবে অনুশীলনে ব্যবহার করা যেতে পারে তা এখানে। ধরা যাক আমরা একটি প্রোগ্রাম লিখছি যা একটি মহাকাশযান চালু করবে। কোডটি দেখতে এইরকম হতে পারে:

for (int i = 10; i > 0; i--)
{
   System.out.println(i);
   Thread.sleep(1000);
}

System.out.println("Let's go!");
প্রতি সেকেন্ডে, প্রোগ্রামটি একটি সংখ্যা প্রদর্শন করবে: 10, তারপর 9, তারপর 8, ইত্যাদি।




যখন গণনা পৌঁছাবে 0, প্রোগ্রামটি " Let's go!" প্রদর্শন করবে

2. সঠিকভাবে একটি বিরতি গণনা করা

বিরতির দৈর্ঘ্য গণনা করা সহজ। আপনার যদি সেকেন্ডে একবার কিছু করার জন্য প্রোগ্রামটির প্রয়োজন হয়, তাহলে বিরতি হল 1000 ms। যদি প্রতি সেকেন্ডে 2 বার হয়, তাহলে 500ms (1000/2) এর জন্য বিরতি দিন।

আপনি যদি প্রতি সেকেন্ডে 15 বার কিছু করতে চান তবে 66 ms (1000/15) এর জন্য বিরতি দিন। এটা সব বরং সোজা মনে হয়:

The duration of one iteration of the loop = 1000 / number of times per second

কিন্তু এখানে একটি খুব গুরুত্বপূর্ণ nuance আছে। যদিও অনেক বিবৃতি খুব দ্রুত কার্যকর হয়, তবে সেগুলি তাত্ক্ষণিক নয়।

এটা দেখ. ধরা যাক আপনার একটি অ্যাকশন আছে যা সম্পূর্ণ হতে 100ms লাগে। আপনি প্রতি সেকেন্ডে 5 বার এই ক্রিয়াটি সম্পাদন করতে চান। কতক্ষণ বিরতি দেওয়া উচিত? অবশ্যই 200ms না।

ক্রিয়াটি প্রতি সেকেন্ডে 5 বার সঞ্চালনের জন্য, আমাদের অ্যাকশনটি চালানোর জন্য প্রয়োজনীয় সময় এবং বিরতির সময়কাল 200 ms এর সমান হতে হবে। যদি আমরা তা করি, তাহলে এটি প্রতি সেকেন্ডে অবিকল 5 বার চলবে। আমাদের ক্ষেত্রে, ক্রিয়াটির জন্য 100 ms প্রয়োজন, যার মানে হল যে বিরতির জন্য এখনও 100 ms বাকি আছে৷

pause duration = duration of one iteration of the loop - time required to execute the action

গেম ডেভেলপাররা ভালভাবে জানেন যে একটি অ্যাকশন চালানোর সময় শূন্যের চেয়ে অনেক বেশি। এবং তাই যারা গেম খেলা হয়.

যদি একটি গেম 20 FPS এ চলে, তার মানে হল এটি এক সেকেন্ডে স্ক্রিনে মাত্র 20টি ফ্রেম আঁকতে পারে। 1000/20ফলন 50 ms গেম খেলার সময় এটি একটি ফ্রেম আঁকার জন্য প্রয়োজনীয় সময় ।



3. ন্যানোসেকেন্ড

কম্পিউটার এখন জাভা তৈরির তুলনায় অনেক দ্রুত। এর মানে হল যে 1 মিলিসেকেন্ডের বিরতি যথেষ্ট পরিমাণে দানাদার নাও হতে পারে।

ধরুন আমাদের কিছু অতি সংক্ষিপ্ত ক্রিয়া আছে যা আমরা প্রতি সেকেন্ডে 2000 বার করতে চাই। আমরা কিভাবে অর্ধেক মিলিসেকেন্ডের জন্য বিরতি করব?

এই জন্য, পদ্ধতির আরও একটি বৈকল্পিক আছে Thread.sleep():

Thread.sleep(milliseconds, nanoseconds);

এই পদ্ধতিটি নির্দিষ্ট পরিমাণ মিলিসেকেন্ড এবং ন্যানোসেকেন্ডের জন্য প্রোগ্রামটিকে ঘুমাতে দেয়।

ন্যানোসেকেন্ড এক মিলিসেকেন্ডের 1 মিলিয়নতম। এর মানে হল যে দেড় মিলিসেকেন্ডের একটি বিরতি এইরকম দেখাবে:

Thread.sleep(1, 500_000);

1/10এবং আপনি যদি মিলিসেকেন্ডের বিরতি চান তবে আপনাকে এটি লিখতে হবে:

Thread.sleep(0, 100_000);

আপনি এই মুহূর্তে আপনার প্রোগ্রামে এই পদ্ধতি ব্যবহার নাও হতে পারে। তবে এটির প্রয়োজন এবং এটি সম্পর্কে না জানার চেয়ে এটি সম্পর্কে জানা এবং এটি ব্যবহার না করা ভাল।



4. TimeUnitক্লাস

যাইহোক, জাভার আরেকটি ক্লাস রয়েছে যা আপনার জীবনকে সহজ করে তুলবে যদি আপনি আপনার অ্যাপ্লিকেশনটি ধীর করার সিদ্ধান্ত নেন। আমরা TimeUnitপ্যাকেজ ক্লাস সম্পর্কে কথা বলছি java.util.concurrent.

মনে রাখবেন যেহেতু ক্লাসটি প্যাকেজে নেই java.lang, তাহলে আপনাকে হয় লাইন যোগ করতে হবে import java.util.concurrent.TimeUnit;, অথবা java.util.concurrent.TimeUnitআপনার কোডে প্রতিবার লিখতে হবে।

এই ক্লাসটি একই জিনিস করে Thread.sleep(), তবে এটি আরও সুবিধাজনক:

TimeUnit.HOURS.sleep(15)

এই কোডটি আপনার প্রোগ্রামকে 15 ঘন্টা ঘুমাতে দেবে। মিনিট, সেকেন্ড, দিনও পাওয়া যায়। পাশাপাশি মাইক্রোসেকেন্ড (1/1000,000) এবং ন্যানোসেকেন্ড (1/1000,000,000)।

ক্লাসের TimeUnit নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  • ন্যানোসেকেন্ড:NANOSECONDS
  • মাইক্রোসেকেন্ড:MICROSECONDS
  • মিলিসেকেন্ড:MILLISECONDS
  • সেকেন্ডSECONDS
  • মিনিট:MINUTES
  • ঘন্টার:HOURS
  • দিন:DAYS

এই বৈশিষ্ট্যগুলির সাথে কাজ করা খুব সুবিধাজনক, যেহেতু ঘন্টাকে মিলিসেকেন্ডে রূপান্তর করার বিষয়ে চিন্তা করার দরকার নেই৷ এই ধরনের কোড লিখতে এবং পড়তে অনেক বেশি আনন্দদায়ক।

আরো বিস্তারিত এখানে পড়া যাবে .