2013-08-13 9 views

Antwort

31

Multi Threading Probleme. Standardmäßig sind Spring Beans Singletons.

+0

public class Calculator { public int AddTwoNumbers (int ersten, zweiten int) { int result = first + Sekunde; Ergebnis zurückgeben; } } – user1933827

+0

ja, das wird die Klasse beheben – WeMakeSoftware

+2

Aber es wird nicht das Überlaufproblem beheben ... –

13

Integer Überlauf ist ein weiteres Problem, wenn dies zählt.

es zu lösen, Sie long stattdessen zurückgeben kann:

long result; 
public long addTwoNumbers(int first, int second) 
{ 
    result = (long)first + second; 
    return result; 
} 

Seien Sie vorsichtig mit nur result = first + second; sagen, wie die beiden int ‚s hinzugefügt werden, so dass ein int (was überlaufen kann), würde das nur dann in eine long umgewandelt werden.

result = (long)first + second; entspricht result = ((long)first) + second; (nicht result = (long)(first + second);), wir eines der int s zu einem long ersten konvertieren Sinn, so wäre es long + int sein, die ein long gibt.

+0

public class Rechner { public long addTwoNumbers (int zuerst, int Sekunde) { langes Ergebnis = erste + Sekunde; Ergebnis zurückgeben; } } – user1933827

+5

Das wird das gleiche Problem haben - die zwei Int wird hinzugefügt werden, geben ein int (was überlaufen kann), die nur dann in eine lange konvertiert werden würde. Bearbeitet. – Dukeling

+0

Ausgezeichnet! Ich mag das. +1 – Chiron

7

Diese Klasse ist nicht Thread sicher, wenn man davon ausgeht, dass es sich um eine Singleton-Springbohne handelt. Wenn zwei Threads addTwoNumbers aufrufen, besteht die Möglichkeit, dass der erste Thread das Ergebnis der Berechnung des zweiten Threads erhält, sodass wir 2 + 2 = 5 erhalten können. Wenn das Ergebnisfeld nirgendwo anders verwendet werden soll, sollte es entfernt werden

public class Calculator { 
     public int addTwoNumbers(int first, int second) { 
     return first + second; 
    } 
}