Friday, March 24, 2017

মাল্টিথ্রেডেড ফাইল কপিয়ার (Multi-threaded file copier)

আগের দুটি আর্টিক্যালে কীভাবে জাভা দিয়ে ফাইল কপি করা যায় দেখানো হয়েছে ও কীভাবে থ্রেড ব্যবহার করতে হয় তার প্রাথমিক ধারণা দেওয়া হয়েছে। 

এই দুটি ধারণা থেকে আমরা একটি মাল্টি থ্রেডেড ফাইল কপিয়ার তৈরি করতে পারি। চলুন তাহলে লিখে ফেলা যাক- 


এক্ষেত্রে আমাদের প্রথমে একটি কপিয়ার লাগবে যা একই নির্দিষ্ট পাথ থেকে ফাইল  অন্য একটি পাথে কপি করতে পারে।


এরপর একটি থ্রেড ক্লাস তৈরি করি যা কিনা এই কপি অপারেশন সম্পন্ন করবে। 


এই ক্লাসটির রান মেথডে Copier এর একটি ইনস্ট্যান্স তৈরি করা হয়েছে। তারপর এর copy মেথডটিকে কল করা হয়েছে। আমাদের উদ্দ্যেশ্য হচ্ছে, একটি ফাইলের জন্য একটি থ্রেড ব্যবহার করবো। অর্থাৎ আমাদের ডিরেক্টরিতে যদি ৫ টি ফাইল থাকে তাহলে আমরা ৫টি থ্রেড তৈরি করবো এবং এগুলো আলাদা আলাদাভাবে পাশাপাশি কপি করতে থাকবে। 

আমাদের এই প্রোগ্রামটি হবে কমান্ডলাইন প্রোগ্রাম। অর্থাৎ আমরা কমান্ড লাইন থেকে ইনপুট নেবো। এক্ষেত্রে আমাদের দুটি ইনপুট নিতে হবে, একটি সোর্স ডিরেক্টরি, অন্যটি ডেস্টিনেশন, অর্থাৎ যে পাথে ফাইলগুলো রাখবো। 


এই CopyApp ক্লাসটির মেইন মেথডে প্রথমে এর ইনস্ট্যান্স তৈরি করা হয়েছে। তারপর মেইন মেথডের আর্গুমেন্ট অ্যারে থেকে সোর্স ও ডেস্টিনেশন টি আলাদা করে copyFiles এই মেথডে আর্গুমেন্ট হিেবে পাস করা হয়েছে। এই মেথডটিতে প্রথমে রিকার্সিভলি সবগুলো ফাইল একটি লিস্টে রাখা হয়েছে। এরপর একটি লুপের মধ্যে প্রত্যেকটি ফাইলের জন্য একটি করে থ্রেড তৈরি করে স্টার্ট করা হয়েছে। 

এরপর থ্রেডগুলোর রেফারেন্স একটি লিস্টে রাখা হয়েছে এবং একটি লুপরের মাধ্যমে এর join মেথডটি কল করা হয়েছে। 

প্রত্যেকটি জাভা প্রোগ্রাম শুরু হয় একটি মেইন থ্রেড থেকে। অর্থাৎ আমরা যদি জাভা প্রোগ্রামে কোনো থ্রেড তৈরি নাও করি, তাহলেও একটি মেইন থ্রেড আমাদের কোডগুলো এক্সিকিউট করে। তাহলে মেইন থ্রেড থেকে আমরা অনেকগুলো থ্রেড তৈরি করেছি এবং মেইন থ্রেড থেকে এগুলোকে রান করতে দিয়েছি। এই থ্রেডগুলো শেষ না হওয়া পর্যন্ত যাতে করে মেইন থ্রেড অপেক্ষা করে এজন্যে এই join মেথডটি কল করা হয়েছে। সবগুলো থ্রেডের কাজ শেষ হয়ে গেলে মেইন থ্রেডে একটি প্রিন্ট করা হয়েছে যে কপি সম্পন্ন হয়েছে।

এবার কমান্ডলাইনে এটিকে রান করতে হলে -




বিঃদ্রঃ এই আর্টিক্যালটি শুধুমাত্র তাদের জন্য যারা উপরে উল্লেখিত আর্টিক্যাল দুটি পড়েছে। এখানে যে কোড দেখানো হয়েছে এগুলো জাভা ৮ ব্যবহার করে আরও সংক্ষিপ্ত ও আর ভালোভাবে লেখা যায়। পরবর্তীতে তা দেখানো হবে।