Ich schreibe meinen Code in Java, wo ich ein Objekt erstelle und in zwei verschiedenen Threads darauf zugreife. Mein erster Thread ruft zur Laufzeit einige öffentliche Methoden für dieses Objekt auf.Überprüfen, ob ein Objekt in Java null ist
final Thread thread1 = new Thread(){
@Override
public void run() {
myObj.pubFunc1();
myObj.puFunc2();
myObj.pubFunc3();
}
};
Ich habe einen anderen Thread thread2
, die diese Aufgabe lösen könnte, und setzen Sie ihn auf null
wie:
final Thread thread2 = new Thread(){
@Override
public void run() {
myObj.release();
myObj = null;
}
};
Meine Frage ist, wenn ich in meinem thread1
, wie dies für null
um jede Aussage prüfen put sollte?
final Thread thread1 = new Thread(){
@Override
public void run() {
if(myObj != null) {
myObj.pubFunc1();
}
if(myObj != null) {
myObj.pubFunc2();
}
if(myObj != null) {
myObj.pubFunc3();
}
}
};
ODER nur ein Scheck um alle Aussagen ist genug? Die grundlegende Frage, die sich daraus ergeben könnte, ist eine Sperre um das Objekt herum, auf das wir einen Null-Check gemacht haben. Wie man mit dieser Situation umgeht. Welches Designmuster sollte ich verwenden, um mit dieser Situation umzugehen?
HINWEIS: Ich möchte nicht, dass die drei Anweisungen notwendigerweise ausgeführt werden, und ich will sogar nicht, dass die drei Anweisungen eine atomare Einheit bilden. Ich möchte nur eine Operation ausführen, wenn das Objekt, für das ich die Operation ausführe, nicht null ist.
Wenn das Objekt asynchron null werden kann, müssen Sie dies überprüfen und es muss entweder "flüchtig" sein oder nur in "synchronisierten" Blöcken oder Methoden gelesen und geschrieben werden. Dies ist kein "Entwurfsmuster", es ist nur gesunder Menschenverstand, der sich aus der JLS ergibt. – EJP