জাভাতে ব্যর্থ-নিরাপদ এবং ব্যর্থ-দ্রুত আইট্রেটারগুলি কী


102

জাভাতে দুই ধরণের পুনরাবৃত্তি রয়েছে: ব্যর্থ-নিরাপদ এবং ব্যর্থ-দ্রুত।

এর অর্থ কী এবং তাদের মধ্যে পার্থক্য কী?


4
সেরা লিঙ্কটি আমি javahungry.blogspot.com/2014/04/…
প্রেমরাজ

4
নোট করুন যে জাভা এসই স্পেসিফিকেশনগুলি কোনও পুনরাবৃত্তকারীকে বর্ণনা করতে "ব্যর্থ-নিরাপদ" শব্দটি ব্যবহার করে না। আমি এইভাবে এই পদটি এড়াতে প্রস্তাব দিই। এছাড়াও দেখুন স্ট্যাকওভারফ্লো.com
স্টুয়ার্ট মার্ক

উত্তর:


86

তাদের মধ্যে পার্থক্য কী ...

"ব্যর্থ-নিরাপদ" ( ইঞ্জিনিয়ারিংয়ে ) এর অর্থ হল যে কোনও কিছু এমনভাবে ব্যর্থ হয় যা কোনও বা সর্বনিম্ন ক্ষতির কারণ হয় না। কড়া কথায় বলতে গেলে জাভাতে ব্যর্থ-নিরাপদ পুনরাবৃত্তকারী বলে কোনও জিনিস নেই । যদি কোনও পুনরুক্তি ব্যর্থ হয় ("ব্যর্থ" এর সাধারণ অর্থে), আপনি ক্ষতি হতে পারে বলে আশা করতে পারেন।

আমার সন্দেহ হয় যে আপনি আসলে "দুর্বলভাবে সামঞ্জস্যপূর্ণ" পুনরাবৃত্তি বলতে চান mean জাভাদোক বলেছেন:

"বেশিরভাগ সমকালীন সংগ্রহ বাস্তবায়ন (বেশিরভাগ কুইউ সহ) সাধারণ জাভা.ইটিল কনভেনশনগুলির থেকেও পৃথক যে তাদের ইটেটর এবং স্প্লিটেটর দ্রুত-ব্যর্থ ট্র্যাভারসালের পরিবর্তে দুর্বলভাবে সামঞ্জস্য সরবরাহ করে।"

সাধারণত, দুর্বল ধারাবাহিকতার অর্থ হ'ল যদি কোনও সংকলন একসাথে পুনরাবৃত্তির সাথে সংশোধন করা হয় তবে পুনরাবৃত্তি যা দেখায় তার গ্যারান্টিগুলি দুর্বল। (বিশদগুলি প্রতিটি সমবর্তী সংগ্রহের ক্লাস জাভাদোকগুলিতে নির্দিষ্ট করা হবে))

"ব্যর্থ-দ্রুত" ( সিস্টেম ডিজাইনে ) এর অর্থ ব্যর্থতার শর্তটি আক্রমণাত্মকভাবে পরীক্ষা করা হয় যাতে ব্যর্থতার শর্তটি (যেখানে সম্ভব 1 ) খুব বেশি ক্ষয়ক্ষতির আগে সনাক্ত করা যায়। জাভাতে, একটি ব্যর্থ-দ্রুত পুনরাবৃত্তকারী একটি নিক্ষেপ করে ব্যর্থ হয় ConcurrentModificationException

"ব্যর্থ-দ্রুত" এবং "দুর্বলভাবে সামঞ্জস্যপূর্ণ" বিকল্পটি শব্দার্থক যেখানে পুনরাবৃত্তিটি অনির্দেশ্য ব্যর্থ হয়; উদাহরণস্বরূপ কখনও কখনও ভুল উত্তর দেওয়া বা একটি অপ্রত্যাশিত ব্যতিক্রম নিক্ষেপ করা। ( Enumerationজাভার প্রাথমিক সংস্করণগুলিতে এপিআইয়ের কিছু মানক প্রয়োগের আচরণ ছিল এটি ))

... এবং এগুলি সংগ্রহের জন্য আমরা ব্যবহার করি তার থেকে পৃথক।

এগুলি স্ট্যান্ডার্ড সংগ্রহের ধরণের মাধ্যমে প্রয়োগ করা পুনরাবৃত্তির বৈশিষ্ট্য ; উদাহরণস্বরূপ, তারা হয় "দ্রুত ব্যর্থ" বা "দুর্বলভাবে সামঞ্জস্যপূর্ণ" ... যখন সিঙ্ক্রোনাইজেশন এবং জাভা মেমরি মডেল 1 এর ক্ষেত্রে সঠিকভাবে ব্যবহৃত হয় ।


ব্যর্থ-দ্রুত পুনরাবৃত্তকারীগুলি সাধারণতvolatile সংগ্রহ অবজেক্টের কাউন্টার ব্যবহার করে প্রয়োগ করা হয় ।

  • সংগ্রহ আপডেট হওয়ার পরে, কাউন্টারটি বাড়ানো হয়।
  • যখন একটি Iteratorতৈরি করা হয়, কাউন্টারটির বর্তমান মানটি Iteratorবস্তুটিতে এম্বেড করা হয় ।
  • যখন কোনও Iteratorঅপারেশন করা হয়, পদ্ধতিটি দুটি পাল্টা মানগুলির সাথে তুলনা করে এবং সেগুলি আলাদা হলে একটি সিএমই নিক্ষেপ করে।

বিপরীতে, দুর্বলভাবে সামঞ্জস্যপূর্ণ পুনরাবৃত্তি সাধারণত প্রতিটি হালকা সংগ্রহের অভ্যন্তরীণ ডেটা স্ট্রাকচারের হালকা ওজন এবং লাভের বৈশিষ্ট্য। কোনও সাধারণ প্যাটার্ন নেই। আপনি যদি আগ্রহী হন তবে বিভিন্ন সংগ্রহ ক্লাসের উত্স কোডটি পড়ুন।


1 - রাইডারটি হ'ল যে ব্যর্থ-দ্রুত আচরণটি সিঙ্ক্রোনাইজেশন এবং মেমরির মডেলের ক্ষেত্রে অ্যাপ্লিকেশন আইডিকে সঠিকভাবে ধরে। এর অর্থ হ'ল (উদাহরণস্বরূপ) যদি আপনি ArrayListযথাযথ সিঙ্ক্রোনাইজেশন ছাড়াই পুনরাবৃত্তি করেন তবে ফলাফলটি একটি দুর্নীতিগ্রস্থ তালিকার ফলাফল হতে পারে। "দ্রুত ব্যর্থ" প্রক্রিয়া সম্ভবত সমকালীন পরিবর্তনটি সনাক্ত করবে (যদিও এটি গ্যারান্টিযুক্ত নয়) তবে এটি অন্তর্নিহিত দুর্নীতি সনাক্ত করতে পারে না। উদাহরণস্বরূপ, javadoc জন্য Vector.iterator()এই বলে:

"একটি এর ব্যর্থ-ফাস্ট আচরণ পুনরুক্তিকারীর নিশ্চিত করা যাবে না যেমন হয় সাধারণত ভাষী unsynchronized সমবর্তী পরিমার্জন উপস্থিতিতে কোনো কঠিন নিশ্চয়তা দিই না করা অসম্ভব। ব্যর্থ ফাস্ট iterators নিক্ষেপ ConcurrentModificationExceptionবেস্ট প্রচেষ্টা ভিত্তিতে। অতএব, এটা হবে কোনও প্রোগ্রাম লিখতে ভুল যা এর শুদ্ধতার জন্য এই ব্যতিক্রমটির উপর নির্ভর করে: পুনরাবৃত্তিকারীদের ব্যর্থ-দ্রুত আচরণটি কেবল বাগগুলি সনাক্ত করতে ব্যবহার করা উচিত। "


42

তারা বরং ব্যর্থ-দ্রুত এবং দুর্বলভাবে সামঞ্জস্যপূর্ণ ধরণের:

সংগ্রহটি পুনরাবৃত্তির সময় সংগ্রহের পদ্ধতিগুলি (যুক্ত / অপসারণ) দ্বারা সংশোধন করা হলে java.utilপ্যাকেজ থ্রো থেকে আইট্রেটার্সConcurrentModificationException

java.util.concurrentপ্যাকেজ থেকে আইট্রেটারগুলি সাধারণত একটি স্ন্যাপশটের মাধ্যমে পুনরাবৃত্তি করে এবং একই সাথে সংশোধন করার অনুমতি দেয় তবে পুনরুক্তি তৈরির পরে সংগ্রহের আপডেটগুলি প্রতিফলিত করতে পারে না।


পরিসংখ্যান ব্যর্থ-নিরাপদ, ইট্রেটর ব্যর্থ-দ্রুতগতির উদাহরণ
অজয় শর্মা

5
@ অজয়শর্মা - দুটি গুণে ভুল। 1) বা ব্যর্থতা দ্রুত বা ব্যর্থ-নিরাপদ হিসাবে আচরণ নির্দিষ্ট Iteratorবা না Enumeration। এটি সুনির্দিষ্ট বাস্তবায়ন (যেমন নির্দিষ্ট সংগ্রহ iterator()/ elements()ইত্যাদি পদ্ধতি যা এই বিষয়গুলি ফেরত দেয়) যা আচরণকে নির্দিষ্ট করে। 2) সাধারণ গণনা বাস্তবায়নগুলি ব্যর্থ-দ্রুত বা ব্যর্থ-নিরাপদ নয়
স্টিফেন সি

22

একমাত্র পার্থক্য হ'ল ব্যর্থ-নিরাপদ পুনরাবৃত্তি ব্যর্থ-দ্রুত আইট্রেটারের বিপরীতে কোনও ব্যতিক্রম ছুঁড়ে না।

যদি সংগ্রহটি কাঠামোগতভাবে পরিবর্তিত হয় যখন একটি থ্রেড এটির উপরে পুনরাবৃত্তি হয়। এর কারণ তারা মূল সংগ্রহের পরিবর্তে সংগ্রহের ক্লোনটিতে কাজ করে এবং এ কারণেই তাদের ব্যর্থ-নিরাপদ পুনরাবৃত্তি হিসাবে ডাকা হয়।

কপিরআনরাইটআরএলিস্টের আইট্রেটর ব্যর্থ-নিরাপদ আইট্রেটারেরও একটি উদাহরণ যা কনকন্টারহ্যাশম্যাপ কীসেট দ্বারা লিখিত পুনরাবৃত্তকারীও ব্যর্থ-নিরাপদ পুনরুক্তিযোগ্য এবং জাভাতে সাম্প্রতিককালে কোনও পরিবর্তন ঘটায় না।


আমি দেখতে পাচ্ছি না
কনকন্টার হ্যাশম্যাপ ইটারেটর

0

এই দৃশ্যটি "সমবর্তী প্রক্রিয়াকরণ" এর সাথে সম্পর্কিত, এর অর্থ হ'ল আরও একজন ব্যবহারকারী একই সংস্থানটিতে অ্যাক্সেস করছেন। এই পরিস্থিতিতে, ব্যবহারকারীদের মধ্যে একটি সেই সংস্থানটি সংশোধন করার চেষ্টা করে যা 'কনকনোয়ারপ্রসেসিং এক্সেপশন' এর কারণ হয় কারণ সেই ক্ষেত্রে অন্য ব্যবহারকারীর ভুল তথ্য পাওয়া যায়। এই ধরণের উভয়ই এই ধরণের পরিস্থিতির সাথে সম্পর্কিত।

সহজ শব্দে,

ব্যর্থ-দ্রুত:

  • কাঠামোগত পরিবর্তন (সংযোজন, আপডেট, মোছা) ঘটে গেলে ইট্রেটাররা তত্ক্ষণাত কনকোর্নোমডিফিকেশন এক্সেক্সশনটি ছুড়ে দেয়।
  • উদাহরণ: অ্যারেলিস্ট, হ্যাশম্যাপ, ট্রিসেট

ব্যর্থতার নিরাপত্তা :

  • এখানে আইট্রেটাররা কোনও ব্যতিক্রম ছুঁড়ে না দেয় কারণ তারা সংগ্রহের ক্লোনটি পরিচালনা করে, মূলটি নয়। সুতরাং, যে তারা ব্যর্থ-নিরাপদ পুনরাবৃত্তি।
  • উদাহরণ: কপিঅনওয়াইরাইটআরলিস্ট, সমকালীন হ্যাশম্যাপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.