2016-10-28 6 views
1

Als ich Core.Java.Volume.I las ich die Bedeutung nicht verstehen kann:wenn ich Core.Java.Volume.I las, kann ich nicht die Bedeutung dieses Satzes verstehen

„Seien Sie vorsichtig, um sicherzustellen, dass der Code in einem kritischen Abschnitt nicht durch Auslösen einer Ausnahme umgangen wird. Wenn eine Ausnahme vor das Ende des Abschnitts geworfen wird, wird der finally-Klausel die Sperre verzichten, aber das Objekt kann in einem beschädigten Zustand sein. "

Wie kann ich das sicherstellen? Muss der Code in einem kritischen Abschnitt nicht umgangen werden, wenn eine Ausnahme ausgelöst wird?

+3

Könnte helfen, den Code zu sehen, der Zitat diskutiert .... denkst du nicht? – Tunaki

+0

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html – davedwards

Antwort

0

Betrachten Sie diese Pseudo-Code:

Patient patient = service.getPatient(name); 
hospitalEquipment.lock(); 
try { 
    patient.pauseLifeSupport(); 
    // some code causing an exception 
    patient.resumeLifeSupport(); 
} finally { 
    hospitalEquipment.unlock(); 
} 

In diesem Pseudo-Code die Ausnahme ein „kritischer Abschnitt“ verursacht umgangen werden, nämlich Lebenserhaltungs wieder aufzunehmen. Sie könnten dies möglicherweise beheben, indem Sie den Aufruf an resumeLifeSupport() im Block finally verschieben oder ein Notfallverhalten ausführen.

0

Fügen Sie in finally Ihren eigenen Code hinzu, um sicherzustellen, dass sich das Objekt in einem sicheren Zustand befindet. Wie genau soll das gemacht werden? Hängt vom Objekt und vom Zustand ab.

Verwandte Themen