Ātra kļūme un droša Java atkārtotāju neveiksme: kāda ir atšķirība?



Šis raksts par “Neveiksmīgu un neveiksmīgu atkārtotāju darbību” palīdzēs jums detalizēti salīdzināt šos divus atkārtotājus ar attiecīgajiem piemēriem.

atbalsta divu veidu iteratorus, no kuriem viens ir ātrs, bet otrais nedarbojas. Tiem ir būtiska loma, ja runa ir par izņēmumu apstrādi Java. Šajā rakstā par “Fail Fast Fast and Fail Safe Iterators” mēs analizēsim divu atkārtotāju darbību, kā arī būtisko atšķirību starp tiem.

ko skeneris dara java

Šajā rakstā ir apskatāmi norādījumi:





Pirms sākat detalizētu skaidrojumu, ļaujiet mums iepazīties ar vienlaicīgas modifikācijas jēdzienu.

Vienlaicīga modifikācija

Ja viens pavediens (vai vairāki pavedieni) atkārtojas pa kolekciju, tas var mainīt kolekcijas struktūru, vai nu pievienojot vai dzēšot kolekcijas elementu, vai arī atjauninot elementa vērtību noteiktā vietā. Šis process ir pazīstams kā vienlaicīga modifikācija.



Ļaujiet mums ātri apskatīt abas sistēmas, kas attiecas uz iepriekš minēto tēmu, pirms iedziļināties tās pašas detaļās,

Neveiksmīga ātrā sistēma:

Sistēma tiek apzīmēta kā sistēma, kas ātri neizdodas, ja tā tiek izslēgta tūlīt pēc kļūdas rašanās. Darbības tiek nekavējoties pārtrauktas un tiek atklātas kļūmes vai kļūdas.

Neveiksmīga sistēma:

Sistēma tiek apzīmēta kā droša sistēma, ja tā turpina darboties arī pēc kļūmes vai kļūdas. Viņi neatceļ darbību un slēpj kļūdas, nevis tās atklāj.



Iteratori java ļauj mums šķērsot kolekcijas objektus. Kolekcijas atdotajiem atkārtotājiem pēc būtības ir vai nu ātrs, vai arī drošs.

Neveiciet ātru atkārtotāju

Ja Java ātri neizdodas, iteratori neatļauj jebkāda veida strukturālas modifikācijas kolekcijā. Strukturālā modifikācija ietver jebkura kolekcijas elementa pievienošanu, noņemšanu vai atjaunināšanu, atkārtojot to. Ja iterācijas procesā strukturāli tiek modificēta kolekcija, iterators izmet ConcurrentModificationException.

Tomēr jāatzīmē, ka, ja vienums tiek noņemts, izmantojot iteratoru pašu metodi, t.i., metodi remove (), izņēmums netiek izmests. Tas ir pilnīgi drošs process. pārliecinieties, ka esat java instalēta jūsu sistēmā

Fail Fast Iterator piemērs:

importēt java.util.HashMap importēt java.util.Iterator importēt java.util.Map publiskā klase FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' Februāris ') monthIndex.put (' 3 ',' Marts ') Iteratora iterators = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // elementa pievienošana Map // izņēmums tiks izmests nākamās metodes // nākamās sarunas laikā. monthIndex.put ('4', 'April')}}}

Izeja:

Izņēmums pavedienā “main” java.util.ConcurrentModificationException

vietnē java.util.HashMap $ HashIterator.nextEntry (Nezināms avots)

Tagad ļaujiet mums iet uz priekšu un apskatīt Fail Safe Iterator,

Neveiksmīgs atkārtotājs

Atšķirībā no Fail Fast iteratoriem, Fail Safe iterators neizmet nekādus izņēmumus, ja kolekcija tiek modificēta iterācijas procesā. Tas ir saistīts ar faktu, ka viņi atkārtojas kolekcijas klonā, nevis faktiskajā kolekcijā. Faktiskās kolekcijas strukturālās modifikācijas viņiem paliek nepamanītas.

Tomēr jāņem vērā, ka nav tādas lietas kā patiesi Fail Safe Iterator. Būtu pareizi to nosaukt par vāji konsekventu. Tas vienkārši nozīmē ja Kolekcija tiek modificēta iterācijas procesā, un tas, ko Iterators redz, tiek vāji garantēts. Šī uzvedība dažādās kolekcijās atšķiras un ir dokumentēta Javadocs.

Neveiksmīga atkārtotāja piemērs:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'Janvāris') monthIndex.put ('2', 'Februāris') monthIndex.put ( '3', 'marts') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'aprīlis')}}}

Izeja:

  • Janvāris
  • Februāris
  • Martā

Visbeidzot, šajā rakstā mēs salīdzināsim šos atkārtotājus,

Atšķirības: ātri neizdoties un neizturīgs atkārtotājs

Tālāk ir norādītas būtiskās atšķirības starp abiem atkārtotājiem:

Parametri Neveiksme ātri atkārtotājs Neveiksmīgs atkārtotājs
Mest vienlaicīgu modifikācijas izņēmumu

Jā, viņi met CocurrentModificationExcepti-on, ja kolekcija tiek modificēta, atkārtojot to.

Nē, viņi neizmet izņēmumus, ja kolekcija tiek modificēta, atkārtojot to.

Klonējiet kolekciju

Nē, viņi izmanto oriģinālo kolekciju, lai šķērsotu elementus.

Jā, viņi šķērsošanai izmanto oriģinālās kolekcijas kopiju.

Atmiņa virs galvas

Nē, viņiem nav nepieciešama papildu atmiņa.

Jā, kolekcijas klonēšanai viņiem nepieciešama papildu atmiņa.

Piemēri

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Šie iteratori ir unikāli un ļoti nepieciešami daudzveidīgajā java valodā. Neskatoties uz to, ka atteices drošībai ir mierinošs gredzens, izrādās, ka atteices ātruma atkārtotājs ir izturīgs.

Tas noved pie šī raksta beigām. Ja vēlaties uzzināt vairāk, iepazīstieties ar autore Edureka. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts, lai dotu jums iespēju sākt Java programmēšanu un apmācīt gan pamata, gan uzlabotas Java koncepcijas kopā ar dažādām Java sistēmām, piemēram, Hibernate & Spring.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī emuāra “Fail Fast vs Fail Safe” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.