জাভাতে কলযোগ্য ইন্টারফেস কীভাবে প্রয়োগ করতে হয়

এই নিবন্ধটি আপনাকে জাভাতে কলযোগ্য ইন্টারফেস কীভাবে উদাহরণ সহ কার্যকর করতে হবে তার বিশদ এবং বিস্তৃত জ্ঞান সরবরাহ করবে।

জাভা মাল্টিথ্রেডিং প্রোগ্রামগুলি ব্যাপক ব্যবহারের সাক্ষ্য দেয় কল এবং ভবিষ্যত। থ্রেড এবং বহু-থ্রেডিংয়ের পূর্বশর্ত জ্ঞানের অধীনে পাঠকরা এই নিবন্ধে আলোচনাকে আরও ভাল করে বুঝতে সক্ষম হবেন। যেহেতু আমি এই নিবন্ধে জাভাতে কলযোগ্য ইন্টারফেসটি ব্যাখ্যা করব।



থ্রেডস উপর পুনরুদ্ধার

যাইহোক, আমি কেবল থ্রেড ধারণার সংক্ষিপ্ত পরিচিতি দেই। একটি থ্রেড কার্যকর করার একটি পৃথক পথ, আপনার যদি পুনরাবৃত্তিযোগ্য কোনও কাজ সম্পাদন করার প্রয়োজন হয় তবে কাজটি একাধিক কার্যে বিভক্ত হয়ে থ্রেডগুলিতে বরাদ্দ করতে পারে। বহু-থ্রেডিংফল দ্রুত পাওয়ার জন্য সমান্তরালভাবে বিভিন্ন কার্য সম্পাদন করতে একাধিক থ্রেড বরাদ্দ করা ছাড়া কিছুই নয়।



জাভাতে কলযোগ্য ইন্টারফেস কী

জাভা 5 এর জন্য, 'java.util.concurrent' ক্লাস চালু হয়েছিল। এই কলযোগ্য ইন্টারফেসটি রানুয়েবল ইন্টারফেসের মতো দেখতে পঠিত প্যাকেজের মাধ্যমে আনা হয়েছিল। এটি যে কোনও বস্তুও ফেরত দিতে পারে এবং একটি ব্যতিক্রম ছুঁড়ে ফেলতে সক্ষম। একটি জাভা কলযোগ্য ইন্টারফেস জেনেরিক্স ব্যবহার করে, সুতরাং এটি কোনও ধরণের অবজেক্টকে ফিরে পাওয়া সম্ভব করে। এক্সিকিউটার ফ্রেমওয়ার্ক থ্রেডের একটি পুলে কলযোগ্য প্রয়োগগুলি কার্যকর করতে একটি জমা () পদ্ধতি দেয়। বাস্তবে, জাভা এক্সিকিউটর ফ্রেমওয়ার্ক ওয়ার্কারথ্রেড নিদর্শনগুলিকে মেনে চলে।

java-interfaceএকটি থ্রেড পুলে ব্যবহারকারীগণ এক্সিকিউটার্স.নেউফিক্সডথ্রেডপুল (10) পদ্ধতি ব্যবহার করে থ্রেড শুরু করতে পারেন এবং তদনুসারে এটিতে একটি কার্য জমা দিতে পারেন। একটি সঞ্চালনযোগ্য থ্রেডের লক্ষ্য হিসাবে কাজ করে এবং একটি পাবলিক শূন্য রানের () পদ্ধতিটি কার্যত সংজ্ঞা দেওয়ার জন্য বাধ্যতামূলকভাবে প্রয়োগ করা হয়। এটি থ্রেড পুলে থ্রেড দ্বারা সম্পাদন করা হবে। পুলের মধ্যে থ্রেডগুলির উপলভ্যতার ভিত্তিতে, এক্সিকিউটার ফ্রেমওয়ার্ক থ্রেডগুলিতে কাজ (চলমান লক্ষ্য) নির্ধারণ করে।সমস্ত থ্রেড যদি ব্যবহার হয় তবে কাজটি স্থগিত করতে হবে। থ্রেডটি একটি কাজ সম্পূর্ণ করার পরে এটি একটি পুল হিসাবে উপলব্ধ থ্রেড হিসাবে ফিরে আসে যা ভবিষ্যতের কাজগুলি গ্রহণ করার জন্য প্রস্তুত। কলযোগ্য রান্নেবলের অনুরূপ এবং যখন আমরা টাস্ক থেকে ফলাফল বা স্থিতি পেতে চাই তখন যে কোনও ধরণের অবজেক্ট ফিরিয়ে দিতে পারি।



কলযোগ্য ইন্টারফেসের রিটার্ন

জাভা কলযোগ্য java.util.concurrent ফিরিয়ে দেয়। জাভা ফিউচার সম্পর্কিত কলযোগ্য টাস্কটি অপসারণ করার জন্য একটি বাতিল () পদ্ধতি সরবরাহ করে। এটি get () পদ্ধতির একটি ওভারলোডেড সংস্করণ, যেখানে কেউ ফলাফলের জন্য অপেক্ষা করার জন্য একটি নির্দিষ্ট সময় নির্দিষ্ট করতে পারে। এটি একটি বর্তমান থ্রেড এড়ানোর জন্য দরকারী, যা দীর্ঘ সময়ের জন্য অবরুদ্ধ থাকতে পারে। দয়া করে মনে রাখবেন যে গেট পদ্ধতিটি একটি সিঙ্ক্রোনাস পদ্ধতি এবং কলযোগ্য তার কার্য শেষ না করে এবং কোনও মান ফেরত না দেওয়া পর্যন্ত এটি কল করার জন্য অপেক্ষা করতে হবে।

সম্পর্কিত কলযোগ্য টাস্কের বর্তমান স্থিতি আনতে 'isDone ()' এবং 'isCancelled ()' পদ্ধতিও রয়েছে। এক থেকে 100 পর্যন্ত সমস্ত সংখ্যার যোগফল খুঁজে পাওয়া দরকার যেখানে উদাহরণটি বিবেচনা করুন। আমরা ক্রমান্বয়ে 1 থেকে 100 লুপ করতে পারি এবং এগুলি শেষ পর্যন্ত যুক্ত করতে পারি। আর একটি সম্ভাবনা বিভক্ত এবং বিজয়ী দ্বারা হয়। এই পদ্ধতিতে আমরা সংখ্যাগুলি এমনভাবে গ্রুপ করতে পারি যে প্রতিটি গ্রুপে ঠিক দুটি উপাদান থাকে। অবশেষে, আমরা সেই গোষ্ঠীকে থ্রেডের একটি পুলে বরাদ্দ করতে পারি। অতএব, প্রতিটি থ্রেড সমান্তরালে একটি আংশিক যোগফল প্রদান করে এবং তারপরে সেই আংশিক অঙ্কগুলি সংগ্রহ করে পুরো যোগফলটি যোগ করতে তাদের যুক্ত করে।



কিভাবে জাভা ক্ষমতা করতে

কলযোগ্য এবং ভবিষ্যত শ্রেণীর বৈশিষ্ট্য

  • কলযোগ্য ক্লাসটি একটি এসএএম টাইপ ইন্টারফেস এবং তাই এটি ল্যাম্বডা এক্সপ্রেশনে প্রয়োগ করা যেতে পারে।

  • কলযোগ্য শ্রেণীর কাছে কেবল একটি পদ্ধতি 'কল ()' রয়েছে যা অ্যাসিঙ্ক্রোনালি সম্পাদন করার জন্য প্রয়োজনীয় সমস্ত কোড ধারণ করে।

  • একটি চলমান ইন্টারফেস পরিবেশে, গণনার ফলাফল ফেরত বা চেক ব্যতিক্রম নিক্ষেপ করার কোন সম্ভাবনা ছিল না। যেখানে কলযোগ্য সাথে একটি মান ফেরত দেওয়া এবং একটি চেক করা ব্যতিক্রম ছুঁড়ে দেওয়া পাওয়া যায়।

  • ফিউচার ক্লাসের () পদ্ধতিটি গণনা শেষ হয়ে গেলে ফলাফল পুনরুদ্ধারে ব্যবহার করা যেতে পারে। সম্পন্ন () পদ্ধতি ব্যবহার করে গণনা শেষ হয়েছে কি না তাও ব্যবহারকারীরা পরীক্ষা করতে পারবেন।

  • ভাউচার.ক্যান্সেল () পদ্ধতি ব্যবহার করে গণনা বাতিল করা কিছু অ্যাপ্লিকেশনগুলিতেও একটি वरदान is

  • গেট () কে একটি ব্লকিং কল বলা হয় এবং এটি গণনা শেষ না হওয়া অবধি অবরুদ্ধ থাকে।

কলযোগ্য এবং চলমান ক্লাসগুলির তুলনা

আহ্বানযোগ্য চলমান
এটি অংশ ' java.util.concurrent ' জাভা 1.5 থেকে প্যাকেজএটি জাভা.১.০ থেকে জাভা.লাং প্যাকেজের অংশ
একটি প্যারামিটারাইজড ইন্টারফেস, যেমন কলযোগ্যএকটি অ-প্যারামিটারাইজড ইন্টারফেস
চেক করা ব্যতিক্রম ছুঁড়ে ফেলতে সক্ষমএটি একটি চেক করা ব্যতিক্রম ছুঁড়ে ফেলতে পারে না
এটিতে একটি একক পদ্ধতি রয়েছে, কল করুন (), যা টাইপ ভি প্রদান করে, এটি সংজ্ঞায়িত ইন্টারফেস প্যারামিটার 'টাইপ' এর সমানএখানে এটির একটি একক পদ্ধতি রয়েছে, যার নাম রান (), যা বাতিল করে দেয়

নীচে প্রয়োগ করা জাভা কলযোগ্য শ্রেণীর একটি সাধারণ উদাহরণ যেখানে কোডটি নির্দিষ্ট থ্রেডের নাম দেয়, যা এক সেকেন্ড পরে কার্য সম্পাদন করে। এখানে আমরা জমা দেওয়া কাজের ফলাফলের সাথে জাভা ফিউচারের সমান্তরালে 100 টি কার্য সম্পাদন করতে এক্সট্রাক্টর কাঠামোটি ব্যবহার করি ize প্রথম স্নিপেটটি আউটপুট এবং নীচে কোডটি উপস্থাপন করে।

প্যাকেজ। .util.concurrent.Executors আমদানি java.util.concurrent.Future ভবিষ্যতের পাবলিক ক্লাস MyCallable কলযোগ্য প্রয়োগ করে {@ ওভাররাইড পাবলিক স্ট্রিং কল () ছোঁড়া ব্যতিক্রম {থ্রেড.স্লিপ (1000) // থ্রেড নামটি এই কলযোগ্য টাস্কটি কার্যকর করে ফেরত করুন Thread.currentThread () .নেটনেম ()} পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং আরগস []) {// এক্সিকিউটর ইউটিলিটি ক্লাস থেকে এক্সিকিউটারসেবা পান, থ্রেড পুলের আকার 10 এক্সিকিউটর সার্ভিস এক্সিকিউটার = এক্সিকিউটারস.নিউফিক্সডথ্রেডপুল (10) // ভবিষ্যতকে ধরে রাখতে একটি তালিকা তৈরি করুন কলযোগ্য তালিকার সাথে সম্পর্কিত বস্তুতালিকা = নতুন অ্যারেলিস্ট() // MyCallable দৃষ্টান্ত তৈরি করুন কলযোগ্য কলযোগ্য = নতুন MyCallable () এর জন্য (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

এক্সিকিউটর পরিষেবাদি বন্ধ করা হচ্ছে

অনেক বিকাশকারী যে গুরুত্বপূর্ণ এবং গুরুত্বপূর্ণ দিকটি মিস করেছেন তা হ'ল এক্সিকিউটর সার্ভিস বন্ধ করে দেওয়া। এক্সিকিউটর সার্ভিসটি অতীব গুরুত্বপূর্ণ এবং অতিরিক্ত থ্রেড উপাদানগুলির সাহায্যে তৈরি করা হয়েছে। মনে রাখবেন যে জেভিএম কেবল তখনই বন্ধ হয় যখন সমস্ত অ-ডেমন থ্রেড বন্ধ করে দেওয়া হয়। সুতরাং কেবল এক্সিকিউটার পরিষেবা বন্ধ করে জেভিএমকে থামতে বাধা দেয়।

এক্সিকিউটার পরিষেবাটি বলার জন্য যে থ্রেডগুলি চালিত হওয়ার দরকার নেই, আমাদের পরিষেবাটি বন্ধ করে দেওয়া উচিত।

শাটডাউন করার জন্য তিনটি উপায় রয়েছে:

শেফ বনাম পুতুল বনাম জবাবদিহি
  • অকার্যকর বন্ধ () - এটি একটি সুশৃঙ্খলভাবে শাটডাউন শুরু করে যেখানে পূর্বে জমা দেওয়া কাজগুলি কার্যকর করা হয়, তবে কোনও নতুন কাজ গ্রহণ করা হয় না।
  • তালিকার শাটডাউন এখন () - এটি সমস্ত সক্রিয়ভাবে সম্পাদনকারী কার্যগুলি বন্ধ করার চেষ্টা করে, মুলতুবি থাকা কার্যগুলির প্রক্রিয়াকরণ বন্ধ করে দেয় এবং কার্য সম্পাদনের অপেক্ষায় থাকা কার্যগুলির একটি তালিকাও ফিরিয়ে দেয়।
  • অকার্যকর অপেক্ষার অবসান () - শাটডাউন অনুরোধের পরে সমস্ত কার্য সম্পাদন শেষ না হওয়া বা সময়সীমা ঘটে যাওয়া অবধি অবরুদ্ধ থাকে। বর্তমান থ্রেড বাধাগ্রস্ত হলে এটিও ব্লক করে। প্রথমে কোন কাজটি আসে তার উপর নির্ভর করে।

এটি সহ, আমরা জাভা নিবন্ধে কলযোগ্য ইন্টারফেসের শেষে এসেছি। আমি আশা করি আপনি জাভাতে ভবিষ্যত এবং কলযোগ্য ইন্টারফেসের একটি বোঝা পেয়েছেন।

দেখুন এডুরেকা, বিশ্বস্ত জুড়ে 250,000 এরও বেশি সন্তুষ্ট শিক্ষার্থীর নেটওয়ার্ক সহ একটি বিশ্বস্ত অনলাইন লার্নিং সংস্থা by এডুরেকার জাভা জে 2 ইই এবং এসওএ প্রশিক্ষণ এবং শংসাপত্রের কোর্সটি এমন শিক্ষার্থী এবং পেশাদারদের জন্য তৈরি করা হয়েছে যারা জাভা ডেভেলপার হতে চান।

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে এই 'জাভাতে কলযোগ্য ইন্টারফেস' ব্লগের মন্তব্য বিভাগে উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।