CompletionHandler এবং Future মডেলের সাথে কাজ করা

Asynchronous I/O (AIO) এর ধারণা - জাভা নিও (Java Nio) - Java Technologies

290

Java NIO (New I/O) এর দুটি শক্তিশালী বৈশিষ্ট্য CompletionHandler এবং Future যা অ্যাসিঙ্ক্রোনাস I/O অপারেশন সম্পাদন করতে ব্যবহৃত হয়। Java 7 তে Asynchronous I/O (AIO) চালু হওয়ার পর, এই দুটি কনসেপ্ট Java NIO এর অংশ হিসেবে পরিচিতি পায় এবং I/O অপারেশনকে আরও কার্যকরী এবং স্কেলেবল করতে সাহায্য করে। এখানে আমরা আলোচনা করব CompletionHandler এবং Future মডেলের মাধ্যমে অ্যাসিঙ্ক্রোনাস I/O অপারেশন কীভাবে পরিচালনা করা যায় এবং তাদের সুবিধাগুলি।


CompletionHandler এর ধারণা

CompletionHandler হল একটি কাস্টম কলব্যাক হ্যান্ডলার যা Java NIO এর AsynchronousChannel (যেমন AsynchronousSocketChannel, AsynchronousFileChannel) এ I/O অপারেশন সম্পাদন করার পরে কলব্যাক প্রদান করতে ব্যবহৃত হয়। এটি অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফল এবং ত্রুটি হ্যান্ডলিং পরিচালনার জন্য একটি সুবিধাজনক উপায়।

CompletionHandler এর কাজ

CompletionHandler দুটি প্যারামিটার নেয়: একটিতে সফল ফলাফল এবং অন্যটিতে ত্রুটির কারণ। এটি সফল I/O অপারেশনের পরে কলব্যাকের মাধ্যমে ফলাফল প্রক্রিয়া করে এবং ত্রুটির ক্ষেত্রে ত্রুটির কারণ সনাক্ত করে।

CompletionHandler এর সাইনেচার

public interface CompletionHandler<V, A> {
    void completed(V result, A attachment);  // Called on success
    void failed(Throwable exc, A attachment);  // Called on failure
}
  • V: অপারেশনের ফলাফল (যেমন, ডেটা বা সংখ্যার মান)
  • A: অ্যাটাচমেন্ট (যেমন, অতিরিক্ত কনটেক্সট বা ডেটা)

CompletionHandler ব্যবহার উদাহরণ

এখানে একটি AsynchronousSocketChannel এর মাধ্যমে CompletionHandler ব্যবহার করার উদাহরণ দেওয়া হলো:

import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;

public class AsyncClient {
    public static void main(String[] args) throws Exception {
        AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
        Future<Void> future = client.connect(new InetSocketAddress("localhost", 8080));
        
        // Wait for connection to be established
        future.get();

        // Prepare data to send
        ByteBuffer buffer = ByteBuffer.wrap("Hello, server!".getBytes());
        
        // Asynchronously write data using CompletionHandler
        client.write(buffer, null, new CompletionHandler<Integer, Void>() {
            @Override
            public void completed(Integer result, Void attachment) {
                System.out.println("Data sent successfully!");
            }

            @Override
            public void failed(Throwable exc, Void attachment) {
                exc.printStackTrace();
            }
        });
    }
}

এখানে, CompletionHandler দুটি মেথড completed() এবং failed() প্রদান করে, যা যথাক্রমে সফল এবং ব্যর্থ অপারেশনের জন্য কলব্যাক হ্যান্ডলিং করবে। এখানে write() অপারেশন অ্যাসিঙ্ক্রোনাসভাবে সম্পাদিত হয় এবং যখন ডেটা সফলভাবে পাঠানো হয়, তখন completed() মেথড কল করা হয়।


Future মডেলের ধারণা

Future Java 5-এ অন্তর্ভুক্ত একটি ইন্টারফেস যা একটি অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফল বা ত্রুটি ফেরত দেয়। এটি সাধারণত ExecutorService-এর সাথে ব্যবহৃত হয় এবং কোনো প্রক্রিয়ার শেষ না হওয়া পর্যন্ত থ্রেড ব্লক না করে ফলাফল পাওয়া সম্ভব করে তোলে। Future একটি একক মানের ফলাফল প্রদান করে, যা একটি অপারেশন শেষ হওয়ার পর রিটার্ন করা হয়।

Future এর সাইনেচার

public interface Future<V> {
    V get() throws InterruptedException, ExecutionException;  // Blocks until the result is available
    boolean cancel(boolean mayInterruptIfRunning);            // Attempt to cancel the task
    boolean isCancelled();                                   // Check if the task was cancelled
    boolean isDone();                                         // Check if the task is completed
}

Future ব্যবহার উদাহরণ

এখানে Future ব্যবহার করে একটি অ্যাসিঙ্ক্রোনাস অপারেশন করা হয়েছে যেখানে একটি থ্রেড তৈরি করা হয়েছে এবং ফলাফল পাওয়ার জন্য get() মেথড ব্যবহার করা হয়েছে।

import java.util.concurrent.*;

public class FutureExample {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        
        // Submit a task to be executed
        Future<Integer> future = executor.submit(() -> {
            Thread.sleep(2000);  // Simulate long computation
            return 42;  // Return some result
        });
        
        // Block until the result is available
        Integer result = future.get();
        System.out.println("Result from future: " + result);
        
        executor.shutdown();
    }
}

এখানে, future.get() মেথডটি থ্রেডটি ব্লক করে রাখে যতক্ষণ না submit() অপারেশনটির ফলাফল পাওয়া যায়।


CompletionHandler এবং Future এর মধ্যে পার্থক্য

বৈশিষ্ট্যCompletionHandlerFuture
প্রকারকলব্যাক হ্যান্ডলারI/O অপারেশনের ফলাফল/ত্রুটি ফেরত দেয়
ফলাফল হ্যান্ডলিংঅ্যাসিঙ্ক্রোনাসভাবে কলব্যাক মেথড দ্বারা হ্যান্ডেল করা হয়ব্লকিং কল (ফলাফল পাওয়ার জন্য)
ব্লকিংনন-ব্লকিংব্লকিং (যতক্ষণ না ফলাফল পাওয়া যায়)
ব্যবহারযোগ্যতাবিশেষভাবে অ্যাসিঙ্ক্রোনাস চ্যানেল অপারেশনগুলির জন্যসাধারণত থ্রেড পরিচালনার জন্য ব্যবহৃত

CompletionHandler এবং Future এর প্রয়োজনীয়তা

১. অ্যাসিঙ্ক্রোনাস I/O অপারেশন:

  • CompletionHandler এবং Future উভয়ই অ্যাসিঙ্ক্রোনাস I/O অপারেশনের জন্য ব্যবহৃত হয়, তবে একে অপরের তুলনায় তাদের ব্যবহারের পদ্ধতি ভিন্ন। CompletionHandler কলব্যাক ভিত্তিক, যেখানে Future ফলাফল বা ত্রুটি ফেরত দেওয়ার জন্য ব্যবহৃত হয়।

২. পারফরম্যান্স এবং স্কেলেবিলিটি:

  • অ্যাসিঙ্ক্রোনাস I/O অপারেশনগুলির মাধ্যমে আপনি থ্রেড ব্লক না করে একাধিক I/O অপারেশন পরিচালনা করতে পারেন, যা সিস্টেমের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সহায়ক।

৩. ফলাফল এবং ত্রুটি হ্যান্ডলিং:

  • CompletionHandler সহজভাবে সফল এবং ব্যর্থ অপারেশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়, যেখানে Future অ্যাসিঙ্ক্রোনাস অপারেশনের শেষ ফলাফল বা ত্রুটি ফেরত দেয়।

CompletionHandler এবং Future Java NIO এর গুরুত্বপূর্ণ বৈশিষ্ট্য যা অ্যাসিঙ্ক্রোনাস I/O অপারেশনগুলির মাধ্যমে একাধিক কাজ করার সুযোগ প্রদান করে। CompletionHandler কলব্যাক ভিত্তিক মেথড সরবরাহ করে, যেখানে Future অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফল ফিরে পেতে ব্লকিং কল তৈরি করে। এই দুটি কৌশল আপনাকে অ্যাসিঙ্ক্রোনাস I/O পরিচালনা করতে সহায়ক, পারফরম্যান্স এবং স্কেলেবিলিটি বাড়াতে সাহায্য করে এবং নেটওয়ার্ক বা ডিস্ক I/O অ্যাপ্লিকেশনগুলির জন্য আদর্শ।


Content added By
Promotion

Are you sure to start over?

Loading...