Java NIO (New I/O) একটি অত্যাধুনিক I/O API যা কার্যকরী এবং উচ্চ পারফরম্যান্স I/O অপারেশন পরিচালনা করতে সহায়ক। NIO এর মধ্যে Locks একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষত যখন একাধিক থ্রেড একই রিসোর্সের উপর কাজ করছে। Shared Locks এবং Exclusive Locks হল দুটি মৌলিক কনসেপ্ট যা Java NIO তে ফাইল সিস্টেমে ডেটার নিরাপত্তা এবং থ্রেড সিঙ্ক্রোনাইজেশন নিশ্চিত করতে ব্যবহৃত হয়।
Locks এর ভূমিকা
Locks হল একটি সিঙ্ক্রোনাইজেশন প্রক্রিয়া যা একাধিক থ্রেডের মধ্যে রিসোর্স (যেমন ফাইল বা ডেটা) অ্যাক্সেসের সময় সঠিক কার্যক্রম পরিচালনা করতে সহায়ক। যখন একাধিক থ্রেড একই রিসোর্সে একসাথে কাজ করতে চায়, তখন সঠিক lock ব্যবহার না করলে ডেটার অখণ্ডতা বিপন্ন হতে পারে।
Shared Lock এবং Exclusive Lock এর ধারণা
১. Exclusive Lock (একচেটিয়া লক)
Exclusive Lock বা একচেটিয়া লক এমন একটি লক যেখানে শুধুমাত্র একথেকে একমাত্র থ্রেড রিসোর্সে সম্পূর্ণ অ্যাক্সেস করতে পারে। অন্য কোনো থ্রেড সেই রিসোর্সে অ্যাক্সেস করতে পারবে না যতক্ষণ না প্রথম থ্রেডের কাজ সম্পন্ন হয় এবং লক মুক্ত হয়।
- ব্যবহার: Exclusive Lock ব্যবহৃত হয় যখন একক থ্রেডকে সম্পূর্ণভাবে ফাইল বা ডেটা পরিবর্তন করতে দেওয়া হয়। এই লকটি সম্পূর্ণ রিসোর্সের উপর একমাত্র নিয়ন্ত্রণ নিশ্চিত করে এবং অন্যান্য থ্রেডের জন্য রিসোর্সটি অবরুদ্ধ করে রাখে।
- সুবিধা: এটি ডেটা সম্পাদনার সময় সর্বাধিক নিরাপত্তা প্রদান করে, কারণ অন্য কোন থ্রেডের দ্বারা ডেটার পরিবর্তন বাধাগ্রস্ত হয়।
- উদাহরণ: ফাইল লেখার সময় বা ডেটা আপডেটের ক্ষেত্রে exclusive lock ব্যবহার করা হয় যাতে অন্য থ্রেড ফাইলটি অ্যাক্সেস বা পরিবর্তন না করতে পারে।
উদাহরণ: Exclusive Lock এর ব্যবহার
import java.nio.channels.FileLock;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
public class ExclusiveLockExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "rw");
FileChannel fileChannel = file.getChannel()) {
// Exclusive lock on the file
FileLock lock = fileChannel.lock();
System.out.println("File is locked exclusively by this thread");
// Perform file operations (e.g., write)
lock.release(); // Release the lock
System.out.println("Exclusive lock released");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে, fileChannel.lock() দ্বারা একচেটিয়া লক সেট করা হয়েছে এবং অন্য থ্রেড এই ফাইল অ্যাক্সেস করতে পারবে না যতক্ষণ না এই থ্রেড লক মুক্ত করে।
২. Shared Lock (শেয়ার করা লক)
Shared Lock বা শেয়ার করা লক এমন একটি লক যা একাধিক থ্রেডকে একই রিসোর্সে একযোগভাবে অ্যাক্সেস করতে অনুমতি দেয়। যদিও একাধিক থ্রেড একই রিসোর্স পড়তে (read) পারে, তবে লেখার (write) জন্য একচেটিয়া লক প্রয়োজন।
- ব্যবহার: Shared Lock ব্যবহৃত হয় যখন একাধিক থ্রেড শুধুমাত্র রিসোর্স পড়তে পারে, কিন্তু যদি কোন থ্রেড রিসোর্স লিখতে চায়, তবে একচেটিয়া লক প্রয়োজন।
- সুবিধা: এটি খুবই কার্যকরী যখন অনেক থ্রেড শুধুমাত্র রিসোর্স পড়তে চায়, এবং এতে পারফরম্যান্সে কোন প্রভাব না পড়ে অনেক থ্রেড একযোগভাবে কাজ করতে পারে।
- উদাহরণ: ডেটাবেসে যখন অনেক ব্যবহারকারী শুধুমাত্র ডেটা পড়তে থাকে এবং একে অপরের সাথে কনফ্লিক্ট করবে না, তখন শেয়ার করা লক ব্যবহার করা হয়।
উদাহরণ: Shared Lock এর ব্যবহার
import java.nio.channels.FileLock;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
public class SharedLockExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "r");
FileChannel fileChannel = file.getChannel()) {
// Shared lock on the file (read access)
FileLock lock = fileChannel.lock(0, Long.MAX_VALUE, true);
System.out.println("File is locked in shared mode (read) by this thread");
// Perform file read operations
lock.release(); // Release the lock
System.out.println("Shared lock released");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে, fileChannel.lock(0, Long.MAX_VALUE, true) দ্বারা শেয়ার করা লক সেট করা হয়েছে, যার মানে অন্যান্য থ্রেডও একই ফাইল পড়তে পারবে, তবে লিখতে পারবে না যতক্ষণ না একচেটিয়া লক পাওয়া না যায়।
Shared এবং Exclusive Lock এর পার্থক্য
| বিষয় | Exclusive Lock | Shared Lock |
|---|---|---|
| থ্রেড অ্যাক্সেস | শুধুমাত্র এক থ্রেড পুরোপুরি অ্যাক্সেস করতে পারে। | একাধিক থ্রেড একই রিসোর্স একযোগভাবে পড়তে পারে। |
| লক মুক্তি | অন্য থ্রেডের জন্য লক মুক্ত না হওয়া পর্যন্ত রিসোর্সটি সম্পূর্ণ ব্লক থাকে। | একাধিক থ্রেডের জন্য রিসোর্সটি পড়ার জন্য উন্মুক্ত থাকে। |
| লক টাইপ | একচেটিয়া (Write) লক | শেয়ার করা (Read) লক |
| লক অবস্থান | একাধিক থ্রেড একই রিসোর্সে একে অপরের সাথে কনফ্লিক্ট করতে পারে না। | একাধিক থ্রেড একই রিসোর্সে একযোগে কাজ করতে পারে। |
| ব্যবহার | ফাইল লেখা বা ডেটা পরিবর্তনের সময়। | ফাইল পড়া বা ডেটা পড়ার সময়। |
Exclusive Lock এবং Shared Lock Java NIO এর গুরুত্বপূর্ণ অংশ যা থ্রেড সিঙ্ক্রোনাইজেশন এবং ডেটার নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়। Exclusive Lock একক থ্রেডকে সম্পূর্ণভাবে রিসোর্সে অ্যাক্সেস করতে দেয়, যা পরিবর্তন বা লেখার জন্য উপযুক্ত। অন্যদিকে, Shared Lock একাধিক থ্রেডকে একই রিসোর্সে একযোগভাবে পড়তে দেয়, যা একাধিক থ্রেড দ্বারা রিসোর্সের অ্যাক্সেসের সময় নিরাপত্তা নিশ্চিত করে এবং পারফরম্যান্স বৃদ্ধি করে।
এই লকগুলির সঠিক ব্যবহার আপনার অ্যাপ্লিকেশনের কার্যক্ষমতা এবং নিরাপত্তা উন্নত করতে সহায়ক হবে।
Read more