Java তে Synchronized শব্দটি Multithreading প্রোগ্রামিংয়ের মধ্যে ব্যবহৃত হয়, যা একাধিক থ্রেডের মধ্যে রেস কন্ডিশন বা ডেটা inconsistency রোধ করে। এটি একটি থ্রেডকে অন্য থ্রেডের সাথে একই সময় একই রিসোর্স অ্যাক্সেস করতে বাধা দেয়। Java তে Synchronized ব্লক এবং Synchronized মেথড ব্যবহৃত হয় একই উদ্দেশ্যে, কিন্তু তাদের মধ্যে কিছু পার্থক্য রয়েছে।
1. Synchronized মেথড (Synchronized Method):
Synchronized মেথড হল একটি মেথড যেটি synchronized কিওয়ার্ড দ্বারা চিহ্নিত করা হয়। যখন একটি মেথড synchronized হয়, তখন এটি শুধুমাত্র একটি থ্রেডের দ্বারা একবারে একযোগভাবে এক্সিকিউট করা যেতে পারে। যখন একটি থ্রেড সেই মেথড কল করে, তখন এটি ঐ মেথডের ব্লকের সাথে সংশ্লিষ্ট অবজেক্ট লক অথবা ক্লাস লক নিয়ে কাজ করবে।
- এটি কীভাবে কাজ করে?
- যদি একটি ইনস্ট্যান্স মেথড
synchronizedহয়, তাহলে ঐ মেথডের কল করার সময় ঐ অবজেক্টের উপর একটি লক নেওয়া হয়। অর্থাৎ, অন্য কোন থ্রেড ঐ একই অবজেক্টেরsynchronizedমেথডে প্রবেশ করতে পারবে না যতক্ষণ না প্রথম থ্রেড মেথডটি সম্পন্ন করে। - যদি এটি একটি স্ট্যাটিক মেথড হয়, তাহলে মেথডটি ক্লাস লক নেবে এবং পুরো ক্লাসের জন্য এটি প্রযোজ্য হবে।
- যদি একটি ইনস্ট্যান্স মেথড
উদাহরণ:
class Counter { private int count = 0; // Synchronized method public synchronized void increment() { count++; } }- বিবরণ: এখানে
increment()মেথডেsynchronizedকিওয়ার্ড ব্যবহার করা হয়েছে। এর মানে হল যে, শুধুমাত্র এক থ্রেড এক সময়ে এই মেথডটি কল করতে পারবে এবং অন্য থ্রেড এটি ব্যবহার করতে পারবে না যতক্ষণ না প্রথম থ্রেড মেথডটি শেষ করে।
2. Synchronized ব্লক (Synchronized Block):
Synchronized ব্লক হল একটি নির্দিষ্ট কোড ব্লক যা synchronized কিওয়ার্ড দ্বারা ঘিরে রাখা হয়। এটি অবজেক্টের নির্দিষ্ট অংশে লক করার জন্য ব্যবহৃত হয়, যাতে শুধুমাত্র সেই নির্দিষ্ট অংশের উপরই থ্রেড এক্সিকিউশন নিয়ন্ত্রণ করা যায়। Synchronized ব্লক কোডের নির্দিষ্ট অংশে লক প্রয়োগ করে, তাই এটি আরও লিগার এবং প্রয়োজনীয় অবস্থায় লক ব্যবহার করার সুযোগ দেয়।
- এটি কীভাবে কাজ করে?
Synchronizedব্লক সাধারণত একটি নির্দিষ্ট অবজেক্টের লক নিয়ে কাজ করে এবং নির্দিষ্ট ব্লক বা কোডের অংশের জন্য এক থ্রেড লক প্রয়োগ করে। এটি তখন কাজ করবে যখন আপনি চান যে শুধু একটি নির্দিষ্ট অংশের জন্য লক প্রয়োগ করা হোক, সব মেথডের জন্য নয়।- এটি মেথডের তুলনায় আরো অর্গানাইজড এবং ফাইন টিউন করা যায়, কারণ আপনি জানিয়ে দিতে পারবেন কোন অবজেক্টের উপর লক প্রয়োগ করতে হবে।
উদাহরণ:
class Counter { private int count = 0; public void increment() { synchronized(this) { count++; } } }- বিবরণ: এখানে
increment()মেথডের মধ্যেsynchronizedব্লক ব্যবহার করা হয়েছে।thisএর মাধ্যমেCounterঅবজেক্টের উপর লক প্রয়োগ করা হয়েছে, এবং এটি শুধুমাত্রcount++কোডের অংশে কাজ করবে। অর্থাৎ, অন্যান্য কোড অংশে কোনো থ্রেড বাধা পাবে না।
Synchronized ব্লক এবং Synchronized মেথডের মধ্যে পার্থক্য:
| পদার্থ | Synchronized মেথড | Synchronized ব্লক |
|---|---|---|
| লকিং অ্যাক্সেস | পুরো মেথডটি একসাথে লক করা হয়। | কোডের নির্দিষ্ট অংশ একসাথে লক করা হয়। |
| লকিং স্তর | এটি ইনস্ট্যান্স অথবা ক্লাস লেভেলে লক প্রয়োগ করে। | নির্দিষ্ট অবজেক্ট বা ক্লাসের উপর লক প্রয়োগ করা যায়। |
| লকিং কন্ট্রোল | এটি পুরো মেথডের জন্য স্বয়ংক্রিয়ভাবে লক নিয়ন্ত্রণ করে। | কোড ব্লকটি যে অংশের জন্য প্রয়োজন, সেই অংশে লক নিয়ন্ত্রণ করা হয়। |
| কোড কভারেজ | পুরো মেথডের জন্য লক প্রয়োগ করা হয়, যা নির্দিষ্ট কোডের মধ্যে কাজ করার ক্ষেত্রে অকার্যকর হতে পারে। | প্রয়োজন অনুযায়ী লকিং কভারেজ খুব সীমিত রাখা যায়। |
| পারফরম্যান্স | এটি পুরো মেথডের জন্য লক প্রয়োগ করে, যা অতিরিক্ত কম্পিউটেশনাল কস্ট তৈরি করতে পারে। | শুধুমাত্র কোড ব্লকের জন্য লক প্রয়োগ করে, যা পারফরম্যান্সের জন্য বেশি উপকারী। |
| ব্যবহার | যখন পুরো মেথডটি থ্রেড সেফ করতে হবে। | যখন কিছু নির্দিষ্ট অংশ থ্রেড সেফ করতে হবে। |
- Synchronized মেথড একটি পুরো মেথডে লক প্রয়োগ করে এবং এটি সহজ এবং সরল কেসগুলোর জন্য ভাল কাজ করে।
- Synchronized ব্লক কোডের নির্দিষ্ট অংশে লক প্রয়োগ করে, যা কোডের কার্যকারিতা এবং পারফরম্যান্স উন্নত করতে সাহায্য করে। এটি অধিক নমনীয় এবং থ্রেড সেফ করার জন্য বেশি কন্ট্রোল প্রদান করে।
সুতরাং, আপনি কোনটি ব্যবহার করবেন তা আপনার প্রয়োজনে এবং কোডের কাঠামোর উপর নির্ভর করবে।
Read more