2013-08-13 26 views

Trả lời

31

Sự cố đa luồng. Theo mặc định, Spring bean là các đĩa đơn.

+0

public class Calculator { public int addTwoNumbers (int đầu tiên, int second) { kết quả int = đầu tiên + thứ hai; kết quả trả về; } } – user1933827

+0

có, điều này sẽ sửa lớp học – WeMakeSoftware

+2

Nhưng nó sẽ không khắc phục sự cố tràn ... –

13

Lỗi tràn là một vấn đề khác, nếu điều này được tính.

Để giải quyết nó, bạn có thể trở long thay vì:

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

Hãy cẩn thận với chỉ nói result = first + second;, như hai int 's sẽ được thêm vào, đưa ra một int (có thể tràn), mà sẽ chỉ sau đó được chuyển đổi thành long.

result = (long)first + second; tương đương với result = ((long)first) + second; (không result = (long)(first + second);), có nghĩa là chúng tôi chuyển đổi một trong những int s đến một long đầu tiên, vì vậy nó sẽ là long + int, mang đến cho một long.

+0

Máy tính công khai { công khai dài thêmTwoNumbers (int first, int second) { kết quả dài = đầu tiên + giây; kết quả trả về; } } – user1933827

+5

Điều đó sẽ có cùng một vấn đề - hai int sẽ được thêm vào, cho một int (có thể tràn), mà chỉ sau đó sẽ được chuyển đổi thành một thời gian dài. Đã chỉnh sửa. – Dukeling

+0

Tuyệt vời! Tôi thích điều này. +1 – Chiron

7

Lớp này không phải là Chủ đề an toàn giả định đây là một bean đơn Spring. Nếu hai chuỗi gọi addTwoNumbers thì có khả năng là luồng đầu tiên sẽ nhận được kết quả của phép tính của chuỗi thứ hai, vì vậy chúng ta có thể nhận được 2 + 2 = 5. Nếu trường kết quả không được sử dụng ở bất kỳ nơi nào khác, nó sẽ bị loại bỏ

public class Calculator { 
     public int addTwoNumbers(int first, int second) { 
     return first + second; 
    } 
} 
Các vấn đề liên quan