Task এবং Service এর মাধ্যমে Background Operations

JavaFX Concurrency এবং Task Management - জাভাএফএক্স (JavaFx) - Java Technologies

297

JavaFX-এর Concurrency Model একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা আপনার অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড অপারেশন পরিচালনার জন্য ব্যবহৃত হয়। JavaFX-এর ইউজার ইন্টারফেস থ্রেড (UI Thread) মূলত ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনা করে, এবং এটি ব্লক হতে দেওয়া উচিত নয়। ব্যাকগ্রাউন্ড অপারেশন সম্পাদন করার জন্য Task এবং Service দুটি গুরুত্বপূর্ণ ক্লাস রয়েছে যা ব্যাকগ্রাউন্ডে কাজ চালাতে সাহায্য করে, এবং UI থ্রেডকে ব্লক না করে কাজ সম্পাদন করা যায়।

Task এবং Service কী?

  1. Task:
    • Task হল একটি জেনেরিক ক্লাস যা javafx.concurrent প্যাকেজের অধীনে আসে। এটি ব্যাকগ্রাউন্ডে একটি কাজ সম্পাদন করার জন্য ব্যবহৃত হয় এবং ইউজার ইন্টারফেসের সাথে ইন্টারঅ্যাকশন করতে update মেথড ব্যবহার করে।
    • এটি Runnable ইন্টারফেসের মতো কাজ করে, তবে এটি প্রগ্রেস আপডেট, ফলাফল এবং ব্যর্থতার প্রতিবেদন করার জন্য অতিরিক্ত ফিচার সমর্থন করে।
  2. Service:
    • Service হল একটি আরো উন্নত কনসেপ্ট যা একটি পুনরাবৃত্ত কার্যক্রম (repeated task) পরিচালনার জন্য ব্যবহৃত হয়, যেখানে Task একটি একক কার্যক্রমের জন্য ব্যবহৃত হয়।
    • Service একটি নতুন Task তৈরি করে, এবং এটি ব্যাকগ্রাউন্ডে কাজটি চালাতে সক্ষম।

ব্যাকগ্রাউন্ড অপারেশন পরিচালনা করার জন্য Task এবং Service ব্যবহারের উদাহরণ

১. Task ব্যবহার করে ব্যাকগ্রাউন্ড অপারেশন

নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে একটি Task ব্যবহার করে ব্যাকগ্রাউন্ডে কাজ করা হচ্ছে এবং UI থ্রেডে তার প্রগ্রেস এবং রেজাল্ট আপডেট করা হচ্ছে।

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TaskExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // UI উপাদান তৈরি
        Button startButton = new Button("Start Task");
        ProgressBar progressBar = new ProgressBar(0);
        
        // Task তৈরি
        Task<Void> backgroundTask = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                // কাজের প্রগ্রেস আপডেট করা
                for (int i = 0; i <= 100; i++) {
                    if (isCancelled()) {
                        break;
                    }
                    updateProgress(i, 100); // প্রগ্রেস আপডেট করা
                    Thread.sleep(100); // কিছু সময়ের জন্য ঘুমানো
                }
                return null;
            }
        };
        
        // প্রগ্রেস আপডেট করতে Task এর সাথে UI উপাদান বাঁধা
        progressBar.progressProperty().bind(backgroundTask.progressProperty());

        // বাটনে ক্লিক করলে Task শুরু হবে
        startButton.setOnAction(e -> {
            new Thread(backgroundTask).start(); // Task ব্যাকগ্রাউন্ডে চালানো
        });
        
        // লেআউট সেট করা
        VBox vbox = new VBox(10, startButton, progressBar);
        Scene scene = new Scene(vbox, 300, 150);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Task Example");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

ব্যাখ্যা:

  • Task তৈরি করা হয়েছে যা একটি ব্যাকগ্রাউন্ড অপারেশন পরিচালনা করবে। এটি প্রতি সেকেন্ডে প্রগ্রেস আপডেট করবে এবং updateProgress() মেথড ব্যবহার করে প্রগ্রেস পরিবর্তন করবে।
  • ProgressBar UI উপাদানকে Task এর প্রগ্রেসের সাথে বাঁধা দেওয়া হয়েছে (progressProperty().bind()), যাতে প্রগ্রেস বার আপডেট হয়।
  • বাটন ক্লিক করলে একটি নতুন থ্রেড শুরু হবে যা Task চালাবে, এবং UI থ্রেড ব্লক হবে না।

২. Service ব্যবহার করে ব্যাকগ্রাউন্ড অপারেশন

যখন আপনার একটি পুনরাবৃত্তি কাজ করতে হয় বা একটি দীর্ঘ-running ব্যাকগ্রাউন্ড অপারেশন চালাতে হয়, তখন Service ক্লাস ব্যবহার করা হয়। এখানে একটি Service ব্যবহার করে ব্যাকগ্রাউন্ড অপারেশন দেখানো হল।

import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ServiceExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // UI উপাদান তৈরি
        Button startButton = new Button("Start Service");
        ProgressBar progressBar = new ProgressBar(0);
        
        // Service তৈরি
        Service<Void> service = new Service<Void>() {
            @Override
            protected Task<Void> createTask() {
                return new Task<Void>() {
                    @Override
                    protected Void call() throws Exception {
                        for (int i = 0; i <= 100; i++) {
                            if (isCancelled()) {
                                break;
                            }
                            updateProgress(i, 100); // প্রগ্রেস আপডেট করা
                            Thread.sleep(100); // কিছু সময়ের জন্য ঘুমানো
                        }
                        return null;
                    }
                };
            }
        };
        
        // প্রগ্রেস আপডেট করতে Service এর সাথে UI উপাদান বাঁধা
        progressBar.progressProperty().bind(service.progressProperty());

        // বাটনে ক্লিক করলে Service শুরু হবে
        startButton.setOnAction(e -> service.start()); // Service চালানো
        
        // লেআউট সেট করা
        VBox vbox = new VBox(10, startButton, progressBar);
        Scene scene = new Scene(vbox, 300, 150);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Service Example");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

ব্যাখ্যা:

  • Service তৈরি করা হয়েছে, এবং createTask() মেথডের মাধ্যমে একটি Task তৈরি করা হয়।
  • Task এর ভিতরে ব্যাকগ্রাউন্ড কাজগুলি করা হচ্ছে এবং updateProgress() মেথড দিয়ে প্রগ্রেস আপডেট করা হচ্ছে।
  • progressProperty() ব্যবহার করে প্রগ্রেস বার UI উপাদানকে Service এর প্রগ্রেসের সাথে বাঁধা দেওয়া হয়েছে।
  • service.start() দ্বারা Service চালানো হচ্ছে।

Task এবং Service এর মধ্যে পার্থক্য:

ক্যারেক্টারিস্টিকTaskService
ব্যবহারএকক কাজের জন্য ব্যবহৃতপুনরাবৃত্তি কাজের জন্য ব্যবহৃত
ব্যাকগ্রাউন্ড থ্রেডনিজেই থ্রেড তৈরি করেনিজে থ্রেড তৈরি করে এবং কাজের জন্য Task তৈরি করে
স্টার্টিংnew Thread(task).start();service.start()
অবস্থাএকবারে একটি কাজ পরিচালনা করেএকাধিক বার চালানো যায়

  • Task এবং Service হল JavaFX-এর দুটি গুরুত্বপূর্ণ ক্লাস, যা ব্যাকগ্রাউন্ডে অপারেশন চালানোর জন্য ব্যবহৃত হয়। Task একক কাজ পরিচালনা করতে ব্যবহৃত হয়, এবং Service পুনরাবৃত্তি কাজের জন্য ব্যবহৃত হয়।
  • এই ক্লাসগুলি ব্যাকগ্রাউন্ড অপারেশন চালাতে সাহায্য করে এবং ইউজার ইন্টারফেস থ্রেডকে ব্লক না করে ইউজার ইন্টারঅ্যাকশনের মাধ্যমে স্মুথ ও সাড়া দানযোগ্য অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
  • Task এবং Service ক্লাস ব্যবহার করে আপনি সহজেই ব্যাকগ্রাউন্ড কাজ চালাতে পারবেন এবং প্রগ্রেস/ফলাফল ইউজার ইন্টারফেসে প্রদর্শন করতে পারবেন।
Content added By
Promotion

Are you sure to start over?

Loading...